c# – 如何告诉DataContract使用基类的GetEnumerator?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何告诉DataContract使用基类的GetEnumerator?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1344字,纯文字阅读大概需要2分钟。
内容图文
![c# – 如何告诉DataContract使用基类的GetEnumerator?](/upload/InfoBanner/zyjiaocheng/770/7cc3b9704a6b4a9287fc706037077eec.jpg)
我有一个实现Dictionary的泛型类.我创建了一个自定义的GetEnumerator,它循环遍历值而不是KeyValuePairs,因为我通常不关心键.这是一个快速示例:
public class AssetHolder<T> : Dictionary<string, T>, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged where T : Asset
{
// methods that don't relate to this post
...
// enumeration methods
IEnumerator System.Collections.IEnumerable.GetEnumerator() // this one is called by WPF objects like DataGrids
{
return base.Values.GetEnumerator();
}
new public IEnumerator<T> GetEnumerator() // this enumerator is called by the foreach command in c# code
{
return base.Values.GetEnumerator();
}
}
我没有向我的类添加任何数据(我只添加了方法),所以为了使其可序列化,我将[DataContract]添加到类的顶部而没有任何[DataMember]标记.我认为这只会使用基类的数据进行序列化/反序列化,但是我收到以下错误:
无法将类型为’Enumerator [System.String,SignalEngineeringTestPlanner.Asset]’的对象强制转换为’System.Collections.Generic.IEnumerator`1 [System.Collections.Generic.KeyValuePair`2
我认为这意味着DataContractSerializer正在调用孩子的枚举器并且它变得混乱,因为它期望一对,但它正在获得一个Asset对象.有没有办法可以(1)告诉DataContractSerializer使用基类的枚举器,或者(2)创建一个特殊的枚举函数并告诉DataContractSerializer只使用那个?
解决方法:
您可以在类中将类型标记为Dictionary,而不是派生类.缺点是您在使用它时必须使用它(或使用正确的类型单独引用).
内容总结
以上是互联网集市为您收集整理的c# – 如何告诉DataContract使用基类的GetEnumerator?全部内容,希望文章能够帮你解决c# – 如何告诉DataContract使用基类的GetEnumerator?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。