为什么我的数组对象的类型为“type”:[“object”,“null”]生成JsonSchema时

时间:2016-08-22 12:51:42

标签: c# jsonschema

所以,我有一个类定义为......

public class foo
{
    public List<bar> Bars {get;set;}
}

public class bar
{
    public string foorbar {get;set;}
}

当我使用JsonSchemaGenerator生成其架构时,我得到以下输出......

var generator = new JsonSchemaGenerator();
return generator.Generate(typeof(foo), false);

{
  "type": "object",
  "properties" : {
      "Bars":{
          "type": "array",
          "items": {
              "type": ["object","null"],
              "properties": { 
                  "foorbar":{"type":"string"} 
              }
          }
      }
   }
}

那么,为什么我的项目在 "type": ["object","null"]

类型的数组中

我认为这会导致问题,如何在此处删除可以为空的对象类型?

由于

1 个答案:

答案 0 :(得分:1)

该方案允许null因为您可以执行类似的操作并尝试将其序列化,这在C#端完全有效:

myFoo.Bars.Add(null);

要禁用数组JSON端的null值,您需要使用JsonArrayAttribute。不幸的是,这个属性无法添加到字段中;它需要添加到一个类。这意味着您需要创建一个包装List<bar>的类并将该属性应用于该类。最终的类结构如下所示:

public class foo
{
    public ListOfBar Bars { get; set; }
}

public class bar
{
    public string foorbar { get; set; }
}

[JsonArray(false)]
public class ListOfBar : List<bar> {}

可以找到有关该属性的详细信息here

通过查看JsonSchemaGenerator的{​​{3}},特别是第285行,我了解了这个属性。