因此,根据官方文档示例,OneNote的响应可能具有以下结构:
{
value:{the content we requested},
error:{error if exists with warnings inside if exist},
@api.diagnostics:{warnings if exist}
}
但是,如果响应主体不包含JSON数组而是包含JSON Object,则响应将是以下
{
Here would be entity, representing the content we requested
}
所以,接下来我的问题是:有没有办法统一OneNote API的响应,因为当前的响应结构违反了它的合同。
由于我有能力使用拦截器更改我的请求模块,因此输出看起来像我需要的,这似乎是一个肮脏的解决方法,所以我想看到关于这个问题的官方信息。
答案 0 :(得分:1)
实际上,除了上面提到的一个肮脏的解决方法之外别无他法。要重构OneNote(和其他常见服务)API,应该实现拦截器或类似servlet的东西,这将传输所有未知属性,这似乎是新的根json属性的权限属性,使其类似到数据集合表示的响应格式。因此,除非重构API以匹配 良好风格 ,否则无法做任何事情。希望微软的某个人能够看到这一点,并对API实施为什么 要求客户端的服务器端工作
进行评论答案 1 :(得分:0)
http://www.odata.org/getting-started/basic-tutorial/
OneNote API是一个OData API - 这意味着它符合OData标准,其中数组作为value属性的一部分返回。
当数组中的实体返回"值"属性:
{
value:[element1, element2, ...],
}
特定实体不是
{
element1
}
通过使用odata有效负载的容器类,在任何支持泛型的语言中相对容易解决,例如:
class ODataPayload<T>{
Public IList<T> Values {get; set;}
}
这样你就可以解析&#34; T&#34;当获得单个实体和获得多个时的ODataPayload时。
或者您也可以使用http://json2csharp.com/之类的东西来生成解析类。
请注意,错误仅会返回4xx ad 5xx状态代码。任何2xx状态代码都应该为您提供实体。