JSON解析对象的字符串 - 保留元素
问题描述:
的顺序我已经这个类需要被序列化到JSON:JSON解析对象的字符串 - 保留元素
[DataContract]
public class InfoRequest
{
[DataMember]
public string folder_id { get; set; }
[DataMember]
public string file_type_id { get; set; }
[DataMember]
public string prefix { get; set; }
[DataMember]
public fileInfo[] files;
[DataMember]
public termInfo[] terms;
}
[DataContract]
public class fileInfo
{
[DataMember]
public string name { get; set; }
[DataMember]
public string size { get; set; }
}
[DataContract]
public class termInfo
{
[DataMember]
public string term_id { get; set; }
[DataMember]
public string value { get; set; }
}
我已经试过ServiceStack.Text,NewtonSoft.Json和DataContractJsonSerializer。我从每个库中获得不同的结果,并且它们中没有一个保留DataMembers的顺序。 (ServiceStack甚至不序列化所有的数据成员) 传球同样InfoRequest对象的每个库,我得到这些字符串:
JsonConvert:
{
"files":[
{
"name":"Blip.txt",
"size":"448"
},
{
"name":"blip.jpg",
"size":"71535"
}
],
"terms":[
{
"term_id":"1000",
"value":"Copyright"
},
{
"term_id":"1000",
"value":"Copyright"
}
],
"folder_id":"11245",
"file_type_id":"234",
"prefix":"",
"ServiceStack":{
"folder_id":"11245",
"file_type_id":"234",
"prefix":""
},
"MS":{
"file_type_id":"234",
"files":[
{
"name":"Blip.txt",
"size":"448"
},
{
"name":"blip.jpg",
"size":"71535"
}
],
"folder_id":"11245",
"prefix":"",
"terms":[
{
"term_id":"1000",
"value":"Copyright"
},
{
"term_id":"1000",
"value":"Copyright"
}
]
}
}
我怀疑数据成员的顺序应该不事,但我从服务器收到错误,并认为这可能是问题。
任何有识之士将不胜感激...
答
注ServiceStack's JSON Serializer只串行公共属性在默认情况下,如果要包括公共领域以及(例如所以它串行“档案”和“术语”以及)你需要包括:
ServiceStack.Text.JsConfig.IncludePublicFields = true;
DataMembers does affect serialization in ServiceStack这使得各个领域选择加入,使用IgnoreDataMember
如果你想退出。
从服务器获得什么错误。因为是的,数据成员的顺序通常并不重要,因为当你反序列化它时,它会自动转换成那个对象 – Sachin 2013-03-12 21:07:51
我真的怀疑顺序问题(除非你处理的是一个非常时髦的服务器应用程序),所以你可能想要在花费太多时间处理订单之前测试该理论。尝试在应用当前正在序列化时手动发布JSON,然后按照您希望的方式重新排列字符串,然后再次发布。这会告诉你错误是否与参数的顺序有关。 – 2013-03-12 21:09:23
我没有看到你设置了你的DataMembers的Order属性。如何尝试http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.order.aspx? – 2013-03-12 21:18:59