2013-03-12 2 views
1

의 위해 내가 필요로이 클래스는 JSON으로 직렬화 할 필요가 유지 : 나는 ServiceStack.Text, NewtonSoft.Json 및 DataContractJsonSerializer를 시도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; } 
} 

. 각 라이브러리에서 다른 결과를 얻었으며 그 중 어느 것도 데이터 멤버의 순서를 유지하지 못합니다. ,

{ 
    "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" 
     } 
     ] 
    } 
} 

내가 DataMembers의 순서해야 하지 문제를 의심 :
JsonConvert : (. ServiceStack도 모든 DataMembers를 직렬화하지 않습니다) 각 라이브러리에 같은 InfoRequest 객체를 전달, 나는이 문자열을 얻을 하지만 서버에서 오류가 발생하여 문제가 될 수 있다고 생각합니다.
모든 통찰력을 주시면 감사하겠습니다 ...

+0

서버에서 어떤 오류가 발생하고 있습니까? 왜냐하면 데이터 멤버의 순서는 일반적으로 중요하지 않기 때문입니다. 역 직렬화 할 때 자동으로 해당 객체로 변환됩니다. – Sachin

+0

정말 펑키 한 서버 응용 프로그램을 다루지 않는 한 순서 문제는 의심 스럽습니다. 순서를 다루는 데 너무 많은 시간을 소비하기 전에 그 이론을 테스트해야합니다. 앱이 현재 직렬화되는 방식으로 JSON을 수동으로 게시 한 다음 원하는대로 문자열을 다시 정렬하고 다시 게시하십시오. 오류가 매개 변수의 순서와 관련이 있는지 여부를 알려줍니다. –

+0

DataMembers의 Order 속성을 설정하는 것을 보지 못했습니다. 어때? –

답변

0

ServiceStack's JSON Serializer에만 시리얼 공용 속성 기본적으로, 당신은뿐만 아니라 공공 필드를 포함 할 경우 (예를 들어,이 시리얼 있도록 '파일'뿐만 아니라 '용어') 당신에게 포함해야합니다 : 당신이 선택할 아웃 할 경우

모든 필드는 옵트하게
ServiceStack.Text.JsConfig.IncludePublicFields = true; 

DataMembers does affect serialization in ServiceStackIgnoreDataMember를 사용합니다.