反序列化未命名的数组

时间:2016-10-02 12:16:22

标签: c# json.net xamarin.forms

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

mapping = {
    r"\bgoodbye\b": ['Goodbye Sir', 'Jarvis powering off in 3, 2, 1, 0'],
    r"\bhello\b": ['Wellcome to Jarvis virtual intelligence project. At your service sir.'],
    ...}

for regex, rand in mapping.items():
    if re.search(message, flags=re.I):
        break
else:
    raise NotImplementedError("What to do?")
speekmodule.speek(rand, n, mixer)

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

在我的模型类中(我使用MVVM方法进行Xamarin项目,但这里并没有过多相关)我使用注释来表示模型属性

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

(或您希望的任何变体,此处的关键是要求反序列化ICollection ReportRow。它可能是您自己的实现ICollection或任何内置函数的类< / p>

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

相关问题