我正在与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。好的,所有设置,这是你的对象。“
我怀疑这涉及到自定义JsonConverter
或IContractResolver
的一些技巧,但我不是在这里连接点。我尝试做一个简单的自定义合约解析器,但似乎使用合约解析器将对象属性名称解析为属性名称以在JSON文本中查找,反之亦然。
答案 0 :(得分:1)
您可以为每种响应类型使用基类+派生。
putStringSet()