2012-06-17 3 views
1

루트 요소 "users"와 "user"항목의 목록을 포함하는 JSON 파일을 받았습니다. Json.NET을 사용하여 사용자 정의 객체의 배열로 JSON을 비 직렬화

나는 User라는 사용자 지정 클래스의 List에 JSON을 역 직렬화하기 위해 노력하고있어,하지만 난 그것을 커버 할 수없는하는 JsonSerializationException가 계속.

코드 :

public class User 
{ 
    public int ID { get; set; } 
    public bool Active { get; set; } 
    public string Name { get; set; } 
} 

public class Response 
{ 
    public List<User> Users { get; set; } 
    public JObject Exception { get; set; } 
} 

그리고 -

public Response DeserializeJSON(string json) 
    { 
     Response deserialized = JsonConvert.DeserializeObject<Response>(json); 
     return deserialized; 
    } 

JSON :

나는 다음과 같은 노력

{ 
    "Users": { 
     "User": [ 
      { 
      "id": "1", 
      "active": "true", 
      "name": "Avi" 
      }, 
      { 
      "id": "2", 
      "active": "false", 
      "name": "Shira" 
      }, 
      { 
      "id": "3", 
      "active": "false", 
      "name": "Moshe" 
      }, 
      { 
      "id": "4", 
      "active": "false", 
      "name": "Kobi" 
      }, 
      { 
      "id": "5", 
      "active": "true", 
      "name": "Yael" 
      } 
     ] 
     } 
} 

죄송합니다 나쁜 스타일링을!

+0

JSON이 유효한지 확인 했습니까? http://jsonlint.com/ 여기에서 덤프 해보고 JSON 자체에 문제가 없는지 확인하십시오. –

+0

그것은 내가했던 첫 번째 일이었습니다. 실제로 유효합니다. – user1461793

답변

0

응답 클래스에서 생성자의 컬렉션을 초기화 해보십시오.

public class Response 
{ 
    public Response() 
    { 
     Users = new List<User>(); 
    } 
    public IEnumerable<User> Users { get; set; } 
    public JObject Exception { get; set; } 
} 
+0

아니, 도움이되지 않았다 ... 같은 오류. 뭐가 될수 있었는지??? – user1461793

+0

시도 할 다음 것은 위의 코드를 유지하지만 컬렉션 형식을 IEnumerable (생성자에서 List로 유지)로 변경하는 것입니다. 위의 솔루션을 편집했습니다. – BlackSpy

+0

여전히 작동하지 않습니다. 디버깅 할 때 Response의 생성자에 도달하지만 List 은 비어 있습니다. – user1461793

0

아 내가 더 JSON을 읽기 시작해야합니다 ... :) 내 문제는이 JSON 문자열을 가리키고 2 "래퍼"가 있다고했다 :

루트 요소는 "사용자"이었다가있는 "사용자"라는 요소를 가졌습니다. 이 문제가 해결되었습니다 :

public class User 
{ 
    public int id { get; set; } 
    public bool active { get; set; } 
    public string name { get; set; } 
} 

public class Response 
{ 
    public ResponseContent users { get; set; } 
} 

public class ResponseContent 
{ 
    public List<User> user; 
} 

고마워요! :)

관련 문제