2016-10-02 65 views
5

我有困难写入适当的注解以表示这是从一个JSON返回Get请求返回像这样的数据的数据:反序列化未命名的阵列

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

(省略号以上只是表明我可以具有可变的数这些物品返回)

在我的模型类(我使用的MVVM的做法了Xamarin的项目,但这里并没有结束有关),我使用的注解来表示模型属性

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;  
     } 
    } 

我想注释另一个显示容器/包含关系的类。但是,由于在注释中没有提供用于表示返回集合的“根”的JSON属性,所以我将会解决这个问题。

我没有问题将JSON映射到任何在返回的JSON中命名的JSON数组的对象模型。在这种情况下,我可以使用包含C#List的名为JSON属性创建另一个类,但我试图为JSON提供适当的模型映射,该映射返回未命名数组内的项目列表。

任何想法,我可以如何处理这个?

+1

祝贺你制定了第一个问题! – Kroltan

回答

4

反序列化JSON,使用:

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

(或任何变异,你愿意的话,这里的关键是要求反序列化的ReportRow一个ICollection这可能是你自己的类实现ICollection,或任何的。 builtins)

同样的想法跟在JsonTextReader或任何其他反序列化JSON.NET提供的手段。只需使用ICollection<YourType>作为目标类型。

+0

谢谢Kroltan。看起来我正确地做到了这一点,所以我正在做反序列化。我的问题是进一步堆栈,所以在Xamarin形式内,以及如何绑定到视图模型内的列表等。这至少有助于我验证我正在使用正确的方法来反序列化JSON。 – retail3r

+0

@ user6911358是的,这通常是对根数组进行反序列化的正确方法。如果你确实需要自己的类型(例如实现一个自定义接口),那么你可以继承这个'List '类型或其他集合。即使实施你自己的,如果真的有必要但它不应该,很可能。在你的Xamarin怀疑中发布另一个问题,并将其链接到此处。 – Kroltan