我有一个需要序列化为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。文本,NewtonSoft。Json和DataContractJsonSerializer。我从每个库中得到不同的结果,它们都没有保留datmembers的顺序。(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的JSON序列化器只序列化公共属性,如果你也想包含公共字段(例如,它也序列化'files'和'terms'),你需要包括:
ServiceStack.Text.JsConfig.IncludePublicFields = true;
datammembers会影响ServiceStack中的序列化,这会使所有字段都选择加入,如果你想退出,请使用IgnoreDataMember