2012-01-05 32 views
5

Tôi đã sau JSON chuỗi: (.. Như bạn có thể nhận thấy tiếc là tôi có một loại nguyên tố "gốc" cho từng đối tượng trong mảng Without này yếu tố "gốc" nhiệm vụ trở nên khá tầm thường)Làm thế nào để deserialize mảng JSON với phần tử "root" cho mỗi đối tượng trong mảng bằng cách sử dụng Json.NET?

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

tôi phải deserialize nó thành một danh sách các Person lớp:

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

có thể làm gì với Json.NET mà không cần tạo lớp wrapper như PersonResult?

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

Các giải pháp hoàn hảo đối với tôi là để có thể bằng cách nào đó một cách rõ ràng cụ thể này "root" (ví dụ như thông qua thuộc tính) và không tạo ra bất kỳ giấy gói, những người giúp đỡ vv

Trả lời

4

Unfortunatelly, không có nhiều bạn có thể làm về vấn đề này. Đó là cách định dạng JSON và không có cách nào xung quanh. Kết quả là, Json.Net "nhìn thấy" chuỗi của bạn càng nhiều hơn hoặc ít hơn:

một mảng của các đối tượng với Person bất động sản, mà là một đối tượng với NameGender tính

Bạn có thể có thể chơi một số với tùy chỉnh ContractResolvers để buộc serializer để làm việc khác nhau ... nhưng đó là khá một chút công việc. Lớp trình bao bọc như bạn đề xuất là cách các vấn đề đó được xử lý và tôi đề nghị gắn bó với nó.

+0

Vâng, rất tiếc là tôi phải kết thúc bằng cách tiếp cận trình bao bọc. Cảm ơn. –

Các vấn đề liên quan