【问题标题】:JSON schema enum to C# class equivalentJSON 模式枚举到 C# 类等价物
【发布时间】: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 typeList<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


【解决方案1】:

原来我不需要担心枚举元标记。只需为版本创建一个字符串属性就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多