反序列化未命名的数组

ret*_*l3r 5 c# json.net xamarin.forms

我在编写适当的注释以表示从JSON Get请求返回的数据时遇到困难,该请求返回如下数据:

[{"ProductCode":"0129923083091","Description":"DIESEL ","SalesLitres":6058.7347,"SalesValue":6416.2000},{"ProductCode":"0134039344902","Description":"UNLEADED ","SalesLitres":3489.8111,"SalesValue":3695.7100},
... 
]
Run Code Online (Sandbox Code Playgroud)

(以上省略号表示我可以返回可变数量的这些项目)

在我的模型类中(我使用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;    
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想创建另一个显示容器/包含关系的类.但是,由于在注释中没有提供JSON属性来表示返回集合的"根",因此我会解开.

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

我有什么想法可以解决这个问题?

Kro*_*tan 7

要反序列化该 JSON,请使用:

JsonConvert.DeserializeObject<List<ReportRow>>(json)
Run Code Online (Sandbox Code Playgroud)

(或您希望的任何变体,这里的关键是要求反序列化 a ICollectionof ReportRow。它可以是您自己的类实现ICollection,或任何内置函数)

同样的想法遵循JsonTextReader或任何其他反序列化 JSON.NET 提供的方法。只需使用 aICollection<YourType>作为目标类型。