以下json文本是调用eBay搜索API的结果。
我的意思是,请注意数据中的每个值是多少?而不仅仅是"key" : "value"
?
例如。
"ack": [
"Success"
],
或
"version": [
"1.12.0"
],
等。
现在,在你回答“之前,也许每个键都有多个结果值”之前......我很确定大多数它们不能。
(这个json架构真的让我的生活成为一个皮塔饼。是的,很容易让每个POCO属性成为List<string>
,但这就是它的全部意义!)
参考文献:Here's the office eBay API documention for this endpoint
答案 0 :(得分:1)
阅读文档后,我了解了eBay的方法,但我发现它在客户端反序列化方面很差。例如,ack
属性的数组值的好处是该值还可以包含警告,例如:
{
"ack": [
"Success",
"Warning"
]
}
然而,字符串列表对于客户端处理并不理想(例如,在C#中,bool hasWarning = pocoList.Contains("Warning");
并不会让我觉得完全万无一失)。我宁愿做出回应,例如:
{
"ack": {
"result": "Success",
"warning": null
}
}
然后使用我的反序列化POCO,假设warning
的值仍然是一个字符串,我可以这样写:
[DataContract]
public class Ack
{
[DataMember(Name="result")]
public string Result { get; set; }
[DataMember(Name="warning")]
public string Warning { get; set; }
[IgnoreDataMember]
public bool HasWarning
{
get { return !string.IsNullOrEmpty(Warning); }
}
}
这样我就可以用bool hasWarning = ack.HasWarning;
替换以前的LINQ查询。
绝对没有必要使用数组的地方。文档将version
属性描述为“eBay用于处理请求的发布版本”,因此我将其作为单个字符串返回。该数组只有在versions
属性时才有意义(例如,用于标识支持特定请求的后端的所有版本)。
我肯定看到了更糟糕的JSON响应,但有些地方理想情况下API应该返回JSON对象或单个值。
答案 1 :(得分:0)