【发布时间】:2013-11-29 01:47:12
【问题描述】:
根据本文,当序列化为 JSON 时,我希望在字段列表的顶部看到基类中的字段。但是,我看到列表底部的字段。实际类本身的顺序是正确的,但层次结构中的顺序不正确。
正在发生的事情是它与班级正确排序,它正在做与我期望的完全相反的事情。我希望基类首先对其字段进行序列化。我不想使用 Order=X 属性,因为我的对象中有太多字段。
这与此处描述的行为完全相反:
http://msdn.microsoft.com/en-us/library/ms729813(v=vs.110).aspx
[DataContract]
public class MyBase {
[DataMember]
public long Id { get; set; }
}
[DataContract]
public class MyChild : MyBase {
[DataMember]
public string Field1 { get; set; }
[DataMember]
public string Field2 { get; set; }
[DataMember]
public string Field3 { get; set; }
}
[DataContract]
public class MySecondChild : MyChild {
[DataMember]
public string SecondField { get; set; }
}
在序列化 MySecondChild 的实例时...
预期
{
"Id": 1,
"Field1": "f1",
"Field2": "f2",
"Field3": "f3",
"SecondField": "s1"
}
实际
{
"SecondField": "s1",
"Field1": "f1",
"Field2": "f2",
"Field3": "f3",
"Id": 1
}
【问题讨论】:
-
我认为这是因为缺少
[KnownType],但实际上我认为可能很简单:您正在阅读的关于DataMember的内容仅适用于@987654327 @. -
如何判断我使用的是 DataContractSerializer 还是其他东西?绝对看起来很奇怪,因为我明确地扩展了基类。
-
好吧,你目前如何序列化它们?您通过什么机制从对象获取到 json?提示:它肯定不是
DataContractSerializer,因为它不是 JSON 序列化器 -
我正在使用内置于 JSON 序列化程序的 ASP.NET Web API。我从全局配置中删除了 XML 格式化程序,以便始终将内容序列化为 JSON。我不太确定如何判断我正在使用什么实现。有什么建议吗? (我同意你的观点,那么它一定不是 DataContractSerializer,因为我专门去 JSON)
-
取决于 MVC 版本,默认为
JavaScriptSerializer或 JSON.NET;我查过了,JavaScriptSerializer似乎不太服从Order...
标签: c# serialization jsonserializer datamember datacontractjsonserializer