gpt4 book ai didi

c# - 我如何告诉 DataContract 使用基类的 GetEnumerator?

转载 作者:行者123 更新时间:2023-11-30 12:50:07 25 4
gpt4 key购买 nike

我有一个实现 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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com