【发布时间】:2016-12-09 18:33:41
【问题描述】:
当我的 Web API 2 解决方案在请求 XML 时尝试解析结果时,我遇到了错误。
通过更多的研究来找出答案。使用默认 XML 序列化程序解析字典时会出现问题。
基类中的属性如下所示:
public Dictionary<string, CustomObject> MyThings{ get; set; }
这可以在没有所有 DataContract 和 DataSerialization 属性的情况下工作。
但是,如果我做同样的事情但将值类型定义为“对象”,我会收到错误:
如果您正在使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。
这很好,据我了解,我需要用预期的类型装饰类,并且序列化程序理论上应该将对象序列化为 XML。
当我装饰类时得到同样的错误。
我不知道这是否是因为在解析“对象”类型方面仍然存在限制。但是从我在其他人的问题和示例中看到的情况来看,如果说该属性是类型的,则它可以工作;
object
而不是
IDictionary<string, object>
我只是想知道我是否误解了如何使用 DataContract、KnownType 和/或 DataMember 属性,或者这实际上是否仍然是使用默认 XML 序列化程序解析字典的限制。
我在这里查看了许多示例和问题,但没有找到一个好的解决方案。
过去有没有人提出过这个问题?如果是这样,您是如何绕过限制的?
我尝试过使用 KeyValuePairs 列表,但也失败了。
谢谢!
例子:
[DataContract]
[KnownType(typeof(Dictionary<string, Type_X>))]
[KnownType(typeof(Dictionary<string, Type_Y>))]
public abstract class BaseClass
{
[DataMember]
public Dictionary<string, object> BaseDictionary{ get; set; }
public BaseClass()
{
BaseDictionary = new Dictionary<string, object>();
}
}
【问题讨论】:
标签: c# xml serialization asp.net-web-api2 datacontractserializer