将第一个不匹配任何目标对象属性的属性反序列化为特定属性

时间:2016-09-30 15:45:31

标签: c# .net json.net .net-4.5.2

我正在与Newtonsoft.Json进行一些Web API集成,而且一如既往,我必须做一些愚蠢的特技才能正确地反序列化他们发回的内容。

在这种情况下,API将发送类似这种结构的响应:

{ "contacts": [ ... ], "has-more": true, "offset": 38817 }

“has-more”和“offset”属性在不同的方法响应上几乎是不变的,并且已经相应地定义在我反序列化的响应对象上。响应对象看起来像这样:

public class APIResponse {
    public JContainer Result { get; set; }
    [JsonProperty("has-more")]
    public bool HasMore { get; set; }
    [JsonProperty("offset")]
    public int Offset { get; set; }
}

第一个“联系”财产是可以变化的;对于某些方法,我可能会得到“联系人”,有些可能会得到“公司”,而其他人可能会得到谁知道什么。我也没有办法确定每个回复都会有这样一个“变量”的属性,也不会说它是第一个,从位置上说。

对于这个例子,我想要发生的是解串器查看Json并说,“让我们看看,我没有看到映射到'联系人'的任何内容,所以我们将其放入'结果'中,然后我可以从JsonProperty属性中看到'has-more'和'offset'进入HasMore和Offset。好的,所有设置,这是你的对象。“

我怀疑这涉及到自定义JsonConverterIContractResolver的一些技巧,但我不是在这里连接点。我尝试做一个简单的自定义合约解析器,但似乎使用合约解析器将对象属性名称解析为属性名称以在JSON文本中查找,反之亦然。

1 个答案:

答案 0 :(得分:1)

您可以为每种响应类型使用基类+派生。

putStringSet()