如何对具有包含不同对象的属性的json进行验证



我目前正在为Zoho Books API的.NET客户端工作,以便将某些数据集成到我的组织中。我一直在努力使API返回的JSON挑剔。问题是由于继承和变化的属性名称。我认为我正在考虑创建一个自定义转换器,以避免为了几个不同的字段创建每个模型的响应类型。

我能够创建一个适合于这样的父响应的自定义转换器:

{
     "code" : 0,
     "message" : "success",
     "invoice" : { // This field varies by model
         "invoice_id" : "..."
     }
}

我为此自定义转换器创建了要点。

自定义转换器的问题之一是,当我从Web客户端传递通用返回类型时,我以基本响应格式或分页响应格式需要它,并且仿制药使我在这里失败。我的转换器不适用于分页的响应。

我将我的基本类型的zohobooks响应定义为:

namespace ZohoBooks4Net.Responses
{
    public class ZohoBooksResponse<T> : IZohoBooksResponse<T>
    {
        /// <summary>
        /// Zoho Books error code. This will be zero for a success response and non-zero in case of an error.
        /// </summary>
        [JsonProperty("code")]
        public int Code { get; set; }
        /// <summary>
        /// Message for the invoked API.
        /// </summary>
        [JsonProperty("message")]
        public string Message { get; set; }
        /// <summary>
        /// Comprises the invoked API’s Data.
        /// </summary>
        public T Resource { get; set; }
    }
}

资源是我所说的响应中的第三个字段。

但是,当响应随着分页而返回时,它添加了另一个字段。

{
  "code": 0,
  "message": "success",
  "contacts": [
    { "..." }
  ],
  "page_context": {
    "page": 1,
    "per_page": 200,
    "has_more_page": false,
    "applied_filter": "Status.All",
    "sort_column": "contact_name",
    "sort_order": "D"
  }
}

所以我创建了描述它的对象:

namespace ZohoBooks4Net.Responses.PaginatedResponses
{
    public class PaginatedResponse<T> : ZohoBooksResponse<T>, IPaginatedResponse<T>
    {
        [JsonProperty("page_context")]
        public PageContext Context { get; set; }
    }
    public class PageContext
    {
        [JsonProperty("page")]
        public int Page { get; set; }
        [JsonProperty("per_page")]
        public int PerPage { get; set; }
        [JsonProperty("has_more_page")]
        public bool HasMorePage { get; set; }
    }
}

如果有人有任何解决方案,我将非常感谢它。

已经在Github托管的.NET库。在订阅Java客户端,页面上下文和资源分别处理。

您是否尝试过使用JSON2CSHARP Web应用程序工具?它将从您的JSON响应中创建所需的类,以及可以与Newtonsoft Jsoncovnert的DeserializeObject方法一起使用的根对象。

从评论者那里获取引用的帖子,我实现了文章海报创建的readjson方法。这解决了我的问题。这是GitHub Gist上DynamicPropertynameconeconconverter的链接。

相关内容

  • 没有找到相关文章

最新更新