我使用JSON架构生成C#
业务对象。
我的一个对象包含一个带有可以为空的双精度列表的属性。
IList<double?> List { get; }
我想通过架构实现这一点。
通常为了使我能够使用这样的结构:
"type": "number",
"required": false
但这不适用于数组
"Values": {
"type": "array",
"items": {
"required": false,
"type": "number"
}
}
这会生成IList<double>
属性。
试图找到有关官方架构site的一些信息。这是一个非常糟糕的网站..
有没有办法在不创建新数据类型的情况下实现此类结构?
UPD.1
我在C#
代码中使用jsonclassgenerator生成器。迁移另一个工具是不可能的......
UPD.2
"MyType": {
"id": "MyType",
"type": "object",
"properties": {
"Values": {
"type": "array",
"items": {
"type": "number",
"required": false
}
}
}
}
生成的类:
public partial class MyType
{
public string Title { get; set; }
public IList<double> Values { get; set; }
}
答案 0 :(得分:0)
将问题分成两个问题可能更好:
如何表达包含数字或数组的jsonschema
空值。
如何根据jsonschema
定义创建类型。
Q1可以通过多种方式解决。我建议用这种方式使用oneOf
子句:
"MyType" : {
"id" : "MyType",
"type" : "object",
"properties" : {
"Values" : {
"type" : "array",
"items" : {
"oneOf" : [{
"type" : "number"
}, {
"type" : "null"
}
]
}
}
}
}
Q2与jsonschema
无关,取决于自定义约定或实现。对于jsonschema
,IList
和array
是相同的。
我建议您在反序列化结构中使用更多常规类型,并在需要时转换为IList
。