2012-01-05 2 views
5

: (.. 당신은 내가 작업이 매우 단순하게이 "루트"요소없이 배열의 각 개체에 대한 "루트"원소의 종류가 불행하게도 알 수 있습니다으로)Json.NET을 사용하여 배열의 각 객체에 대해 "root"요소를 사용하여 JSON 배열을 비 직렬화하는 방법은 무엇입니까? 내가 JSON 문자열 다음 한

[ 
    { "Person" : { "Name" : "John", "Gender" : "male" } }, 
    { "Person" : { "Name" : "John", "Gender" : "male" } } 
] 

나는 Person 클래스의리스트에 역 직렬화 할 수 있습니다

class Person { 
    public string Name { get; set; } 
    public string Gender { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<Person>>(jsonString); 
} 

이 PersonResult 같은 래퍼 클래스를 생성하지 않고 Json.NET와 함께 할 수 있습니까?

class PersonResult { 
    public Person Person { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString) 
         .Select(p => p.Person) 
         .ToList(); 
} 

나를위한 완벽한 솔루션 등

답변

4

Unfortunatelly, 많은 거기에 당신이 할 수 아니에요, 헬퍼,이 "루트"(예를 통해 속성)를 지정하고 래퍼를 작성하지 않습니다 어떻게 든 명시 적으로 할 수있다 이 문제에 관해서. 이것이 JSON 형식이 어떻게 생겼는지와 그 주위에 방법이 없습니다. 그 결과, Json.Net는 귀하의 문자열을 "인식"더 많거나 적은 :

NameGender 속성

당신은 수와 또 다른 목적은 Person 특성을 가진 객체의 배열 serializer가 다른 방식으로 작동하도록 사용자 정의 ContractResolvers으로 일부 재생할 수도 있습니다.하지만 그 작업은 매우 간단합니다. 당신이 제안한 래퍼 클래스는 어떻게 이러한 문제가 다루어 지는지, 그리고 나는 그것에 충실하는 것이 좋습니다.

+0

그래, 불행히도 나는 래퍼 접근 방식으로 끝내야 만했다. 감사. –

관련 문제