2013-03-12 91 views
1

的顺序我已经这个类需要被序列化到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" 
     } 
     ] 
    } 
} 

我怀疑数据成员的顺序应该事,但我从服务器收到错误,并认为这可能是问题。
任何有识之士将不胜感激...

+0

从服务器获得什么错误。因为是的,数据成员的顺序通常并不重要,因为当你反序列化它时,它会自动转换成那个对象 – Sachin 2013-03-12 21:07:51

+0

我真的怀疑顺序问题(除非你处理的是一个非常时髦的服务器应用程序),所以你可能想要在花费太多时间处理订单之前测试该理论。尝试在应用当前正在序列化时手动发布JSON,然后按照您希望的方式重新排列字符串,然后再次发布。这会告诉你错误是否与参数的顺序有关。 – 2013-03-12 21:09:23

+0

我没有看到你设置了你的DataMembers的Order属性。如何尝试http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.order.aspx? – 2013-03-12 21:18:59

回答