2016-06-09 2 views
2

내가Json.NET도 실패한

JSON Newtonsoft Json.NET와 JSON의 조각을 구문 분석 할 필드 전용 클래스에 JSON을 역 직렬화하기 :

{ 

    "USER":{ 
     "result_id":"0", 
     "result_description":"NET Connections", 
     "cmlog_username":[ 
      "8118236834", 
      "8118236834", 
      "8118236834" 
     ], 
     "caller_id":[ 
      "14cc20f7b05f", 
      "14cc20f7b05f", 
      "14cc20f7b05f" 
     ] 
    } 

} 

클래스

public class USER 
     { 
      public string result_id; 
      public string result_description; 
      public string[] cmlog_username; 
      public string[] caller_id; 
     }//USER 

아래 코드로 변환하지만 속성 값이 모두 NULL입니다.

USER con = JsonConvert.DeserializeObject<USER>(msg); 
+0

필드가 아닌 속성을 사용하십시오. 속성은 클래스의 인터페이스의 일부이며 필드는 내부 데이터 만 보유합니다. 모든 serializer는 속성을 사용합니다. 필드는 항상 예외로 처리됩니다. –

+1

@PanagiotisKanavos, JSON.NET은 공개 필드로 행복하게 deserialize합니다. 다음은 작동하는 모습을 보여주는 피들입니다 (https://dotnetfiddle.net/NNEFMm). –

답변

3

비 직렬화 클래스가 잘못되었습니다. json2csharp.com로 JSON을 두는 것은 생산 :

public class USER 
{ 
    public string result_id { get; set; } 
    public string result_description { get; set; } 
    public List<string> cmlog_username { get; set; } 
    public List<string> caller_id { get; set; } 
} 

public class RootObject 
{ 
    public USER USER { get; set; } 
} 

그래서 당신이해야 할 것 :

User con = JsonConvert.DeserializeObject<RootObject>(msg); 

귀하의 JSON 객체가 USER 아니라,이 USER 포함하는 객체입니다.

+0

Upvote, 내 답변보다 훨씬 잘 설명되어 있습니다. –

+0

주요 차이점은 OP가 필드를 사용하는 반면이 대답은 속성을 사용한다는 것입니다. 필드에 비 직렬화 할 수는 있지만 예외적 인 경우는 피해야합니다. –

+0

@PanagiotisKanavos : 속성을 사용하는 것이 학계에서 옳은 것은 사실이지만 필드를 사용하기로 선택한 경우 세상 끝이 아닙니다. –

0

한번에 가져 오기를 추가하고 클래스

public class USER 
{ 
      public string result_id { get; set; } 
      public string result_description { get; set; } 
      public string[] cmlog_username { get; set; } 
      public string[] caller_id { get; set; } 
}//USER 
+0

수정자가 아닙니다. OP는 * 속성 *을 표시하는 동안 필드를 사용합니다. 그들은 다른 종류의 회원입니다. 방법은 필드 나 속성과 다릅니다. –

+0

설명 해 주셔서 감사합니다. @PanagiotisKanavos –

+1

@ JackMorton : 그건 문제가 아닙니다. JSON.NET은 공개 필드 (https://dotnetfiddle.net/NNEFMm)로 비 직렬화됩니다. –

0

당신이 사용자로 구문 분석하려고하는 JSON 객체가 사용자 개체는 '사용자'의 속성을 가진 개체입니다 때문입니다 설정. 그것은 아마도별로 의미가 없었습니다. json을

{ 
    "result_id":"0", 
    "result_description":"NET Connections", 
    "cmlog_username":[ 
     "8118236834", 
     "8118236834", 
     "8118236834" 
    ], 
    "caller_id":[ 
     "14cc20f7b05f", 
     "14cc20f7b05f", 
     "14cc20f7b05f" 
    ] 
} 

으로 변경할 수 있습니다.