C# NSwagStudio和Swagger 2.0 x-sub_类型

C# NSwagStudio和Swagger 2.0 x-sub_类型,c#,nswag,nswagstudio,C#,Nswag,Nswagstudio,我认为这是一个NSwag或NSwagStudio的问题,但我没有足够的经验来知道我是否使用错了,或者NSwag中是否存在错误,或者我正在使用的Swagger 2.0文档是否存在问题 我正在使用NSWAGStudio13.6.1.0为Salesforce OCAPI商店API生成一个C#客户端。表示order\u search\u请求propertyquery的类型显示为一个没有属性的空类。但是Swagger文档声明了几个查询的子类型,其中一些确实具有属性: "query"

我认为这是一个NSwag或NSwagStudio的问题,但我没有足够的经验来知道我是否使用错了,或者NSwag中是否存在错误,或者我正在使用的Swagger 2.0文档是否存在问题

我正在使用NSWAGStudio13.6.1.0为Salesforce OCAPI商店API生成一个C#客户端。表示
order\u search\u请求
property
query
的类型显示为一个没有属性的空类。但是Swagger文档声明了几个
查询的子类型,其中一些确实具有属性:

  "query": {
      "$ref": "#/definitions/query",
      "description": "The query to apply",
      "x-sub_types": {
          "nested_query": "#/definitions/nested_query",
          "filtered_query": "#/definitions/filtered_query",
          "text_query": "#/definitions/text_query",
          "match_all_query": "#/definitions/match_all_query",
          "term_query": "#/definitions/term_query",
          "bool_query": "#/definitions/bool_query"
      }
  }
首先,我假设这些
x-sub_类型
应该作为
Query
的子类生成,而它们不是。但是根据请求主体应该包含的非招摇过市的文档,似乎
Query
应该包含以下子类型之一,而不是其中之一:

{ 
   "query" :
   { 
      "text_query": { "fields": ["customer_email"], "search_phrase":"example@non.existing.com" }
   },
   "select" : "(**)",
   "sorts" : [{"field":"customer_name", "sort_order":"asc"}]
}

由于NSwag生成分部类,我可能能够将必要的字段添加到
Query
我自己。但这真的是最好的解决方案吗?我想知道是否有可能让NSwag在一开始就做正确的事情,或者狂妄自大的文档是否错误地描述了API。另一种明显的可能性,特别是考虑到
x-
前缀,就是
x-sub_类型
只是Salesforce发明的一些非标准的东西。

不管怎样,手动将“subtype”属性添加到生成的
Query
类的我自己的部分中,效果与预期一样。不过,我仍然不知道这是否是“答案”。可能有一种定制NSwag的方法来处理这个问题。(
SalesforceServices.OCAPI.Shop
是我给生成的客户端的包名。)


值得一提的是,手动将“subtype”属性添加到生成的
Query
类的我自己的部分中,效果与预期一样。不过,我仍然不知道这是否是“答案”。可能有一种定制NSwag的方法来处理这个问题。(
SalesforceServices.OCAPI.Shop
是我给生成的客户端的包名。)

using Newtonsoft.Json;

namespace SalesforceServices.OCAPI.Shop
{
    public partial class Query
    {
        [JsonProperty("text_query", NullValueHandling = NullValueHandling.Ignore)]
        public Text_query TextQuery { get; set; }
        [JsonProperty("match_all_query", NullValueHandling = NullValueHandling.Ignore)]
        public Match_all_query MatchAllQuery { get; set; }
        // TODO all the query types!
    }
}