Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#类的JSON模式_C#_Json_Class_Schema - Fatal编程技术网

C#类的JSON模式

C#类的JSON模式,c#,json,class,schema,C#,Json,Class,Schema,我不熟悉JSON,但我对C#有点了解。我有一个JSON模式,我遇到了一个部分,我不知道如何将它放在objects类中 "def_subscore": { "type": "number", "minimum": 0, "maximum": 10 }, "def_impact": { "type": "object", "properties": { "baseMetricV3": { "type": "object"

我不熟悉JSON,但我对C#有点了解。我有一个JSON模式,我遇到了一个部分,我不知道如何将它放在objects类中

"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
是一个类对象,用它的类型和属性定义<代码>可利用性核心应该是一个“子核心”,定义为具有最小和最大限制的数字

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

模式只是说
可利用性核心
影响分数
只是需要在代码中验证以确保值介于0和10之间的双/整数吗


或者模式只是说
可利用性核心
影响分数
只是双/整数,顺便说一句,数据的值不应该超过0和10(因为验证已经在他们这边完成,
定义子核心
更具信息性)?

如果您的模式说
prop
属于
number
类型,则必须为该属性定义一些
double/int/float/…
数值类型,而不是类

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

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

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

对于其他约束,可能存在其他注释。您甚至可以自己定义它们,如图所示

json没有标准的模式系统。所使用的示例可能是由lib发明的。所以简单的回答是,不,你不能自动做到这一点。手动验证是必要的required@Steve这不是一个正式的IEEE标准,但可以肯定的是,任何谈论json模式的人都在谈论这一点,所以将json看作是结构化数据的导出。听起来你希望JSON能真正序列化类逻辑?您不导出类逻辑,只导出数据属性。因此,没有方法或构造函数,实际JSON中也没有存储if-then-else逻辑。您不能在与导出的JSON不同的系统上重新创建类。您只能加载该类,但另一个系统需要知道该类是什么,否则它将只加载一个简单的POCO作为替代。@Juls您必须区分模式(如上所示)它描述对象和数据对象本身的结构和约束。它类似于XML模式和XML。模式只定义了属性和类型(可能还有对类型的约束),但不包含任何数据。然后,如果数据对象符合模式,则可以对其进行验证(即,数据对象具有正确类型的所有必需属性,并且值遵循给定的约束)。“没有人在谈论方法,当然只有属性。”derpirscher从我对原始问题的阅读中,听起来像~toadfromgrove,他说他是JSON新手,认为JSON将序列化实际的类逻辑。我只是想说明JSON并不是序列化类,而是序列化数据属性。如果您是新手,这可能是您需要知道的第一件事。因此,我选择添加带有Range属性和公共双值属性的对象类子核心。我能看到的唯一负面影响不是用“Impact.developeratabilityscore=…”更新剥削能力核心,我只需要在Impact对象中更深一层,并设置subcore.value=。。。