2016-10-02 36 views
5

Tôi gặp khó khăn bằng văn bản cho các chú thích thích hợp để đại diện cho dữ liệu đó được trả về từ một JSON Nhận yêu cầu trả về dữ liệu như vậy:deserializing một mảng vô danh

[{"ProductCode":"0129923083091","Description":"DIESEL ","SalesLitres":6058.7347,"SalesValue":6416.2000},{"ProductCode":"0134039344902","Description":"UNLEADED ","SalesLitres":3489.8111,"SalesValue":3695.7100}, 
... 
] 

(ellipsis trên chỉ chứng tỏ rằng tôi có thể có số biến của các mặt hàng này trả lại)

trong lớp mô hình của tôi (tôi đang sử dụng cách tiếp cận MVVM cho một dự án Xamarin nhưng đó không phải qua liên quan ở đây) tôi đang sử dụng chú thích để đại diện cho mô hình thuộc tính

namespace App8.Models 
    { 

     public class ReportRow 
     { 
      [JsonProperty("ProductCode")] 
      public string ProductCode { get; set; } = string.Empty; 

      [JsonProperty("Description")] 
      public string Description { get; set; } = string.Empty; 

      [JsonProperty("SalesLitres")] 
      public double SalesLitres { get; set; } = 0.0; 

      [JsonProperty("SalesValue")] 
      public double SalesValue { get; set; } = 0.0;  
     } 
    } 

Tôi muốn giới thiệu một lớp khác thể hiện quan hệ chứa/chứa. Tuy nhiên, tôi sẽ không bị giới hạn vì không có thuộc tính JSON nào cung cấp trong chú thích để biểu diễn "gốc" của tập hợp được trả về.

Tôi không có vấn đề gì khi ánh xạ JSON tới một mô hình đối tượng cho bất kỳ mảng JSON nào được đặt tên trong JSON được trả về. Trong trường hợp đó, tôi có thể tạo một lớp khác với thuộc tính JSON có tên trong danh sách C# nhưng tôi đang cố gắng cung cấp ánh xạ mô hình thích hợp cho JSON trả về một danh sách các mục trong một mảng chưa đặt tên.

Bất kỳ ý tưởng nào về cách tôi có thể tiếp cận điều này?

+1

Chúc mừng một câu hỏi đầu tiên được xây dựng tốt! – Kroltan

Trả lời

4

Để deserialize rằng JSON, sử dụng:

JsonConvert.DeserializeObject<List<ReportRow>>(json) 

(hoặc bất kỳ biến thể bạn muốn, chìa khóa ở đây là yêu cầu để deserialize một ICollection của ReportRow Nó có thể là lớp của riêng bạn thực hiện ICollection, hoặc bất kỳ. builtins)

Ý tưởng tương tự sau JsonTextReader hoặc bất kỳ phương tiện nào khác để deserializing JSON.NET cung cấp. Chỉ cần sử dụng ICollection<YourType> làm loại mục tiêu.

+0

Cảm ơn Kroltan. Có vẻ như tôi đang làm điều đó một cách chính xác vì vậy đó là những gì tôi đang làm để deserialize nó. Vấn đề của tôi là tăng thêm stack trong các hình thức Xamarin và cách tôi liên kết với danh sách đó trong một viewmodel, vv Điều đó ít nhất giúp tôi trong việc xác nhận rằng tôi đang sử dụng cách tiếp cận chính xác để deserializing JSON. – retail3r

+0

@ user6911358 Có, đây thường là cách tiếp cận chính xác để khử mảng gốc. Nếu bạn thực sự cần loại của riêng mình (ví dụ: để triển khai giao diện tùy chỉnh), bạn chỉ có thể phân lớp loại 'Danh sách ' hoặc một số bộ sưu tập khác. Thậm chí thực hiện của riêng bạn nếu thực sự cần thiết. Nhưng nó không nên, rất có thể. Đăng một câu hỏi khác với những nghi ngờ Xamarin của bạn và liên kết nó ở đây. – Kroltan

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