【发布时间】:2019-01-18 03:20:01
【问题描述】:
我有一个 JSON 模式,我正试图从中创建一个 C# 类。
我的问题很快就在于 RootObject 的第一个属性。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"version": {
"type": "string",
"enum": [ "3.0" ]
},
"vectorString": {
"type": "string"
}
},
"required": [ "version" ]
}
vectorString 是一个字符串,所以这很简单:
public class RootObject {
public string vectorString { get; set; }
}
然而,版本是一个字符串并且有一个枚举修饰符。我的问题是,如何将 JSON 模式中的静态枚举值建模为 C# 类?
【问题讨论】:
-
我完全不确定“枚举修饰符”是什么意思,但
version是一个带有string type和List<string> enum的对象。尝试使用json2csharp.com -
我试过了,但有缺陷。例如,要使属性成为必需,只需在类属性上方添加 [Required()],但 json2csharp.com 会创建一个类,其中 RootObject 具有一个名为 required 的数组的属性。因此,我遵循您的第一个声明,即版本是一个字符串。所以它看起来像类的 vectorString 属性。但是枚举在哪里发挥作用?那只是告诉我们数据将是一个字符串,并且它只会是这个枚举中的一个值(即 3.0)
-
使用app.quicktype.io 它有C#的转换器。但请注意,您的枚举字段的“3.0”值在 C# 中不能是有效的枚举值,因此需要一些技巧来实现它,并且提到的转换可以做到这一点。但是您可能会考虑一种简单的方法 - 只需将“版本”字段视为字符串。这取决于您想要的使用场景。如果你想在代码中比较这个字段而不是枚举,你甚至可以定义一个字符串 const MyVersion="3.0"。
-
@SergeyL 正确。我总是可以将该属性设置为一个字符串,并在我的代码中进行验证,以确保该值是模式指定的“枚举”中的一个。我只是不知道是否有办法让类镜像属性为枚举的架构信息。
标签: c# json class enums schema