首页 > 解决方案 > JSON 模式到 C# 类

问题描述

我是 JSON 新手,但我对 C# 有点了解。我有一个 JSON 模式,我遇到了一个我不知道如何将它放在对象类中的部分。

"def_subscore": {
    "type": "number",
    "minimum": 0,
    "maximum": 10
},
"def_impact": {
    "type": "object",
    "properties": {
        "baseMetricV3": {
            "type": "object",
            "properties": {
                "cvssV3": {"$ref": "cvss-v3.0.json"},
                "exploitabilityScore": {"$ref": "#/definitions/def_subscore"},
                "impactScore": {"$ref": "#/definitions/def_subscore"}
            }
        }
    }
}

正如我们所看到baseMetricV3的,它是一个类对象,并使用它的类型和属性进行定义。exploitabilityScore应该是一个“子分数”,它被定义为具有最小和最大限制的数字。

我可以创建一个类似于双/整数的类并且还必须通过特定于类的验证吗?

模式是否只是说exploitabilityScore并且impactScore只是需要在我的代码中验证以确保值介于 0 和 10 之间的双/整数?

还是模式只是说exploitabilityScore并且impactScore只是双/整数,顺便说一句,数据永远不应该以 0 和 10 之外的值出现(因为验证已经在他们这边完成了,而且def_subscore更多的是信息)?

标签: c#jsonclassschema

解决方案


如果您的架构说prop是类型,您必须为该属性而不是类number定义一些数字类型。double/int/float/...

如果您只想检查 JSON 对象是否符合给定的模式,您可以使用一些 json 验证器库来根据模式验证对象。

此外,(或者如果您将 JSON 字符串解析为自定义类),您可以为您的类使用RangeAttribute

class SomeClass {
    [Range(1, 10)]
    public int SomeValue {get;set;}
}

For other constraints there may be other Annotations. You can even define them yourself like shown here https://stackoverflow.com/a/7256854/3776927


推荐阅读