C#类的JSON模式
我不熟悉JSON,但我对C#有点了解。我有一个JSON模式,我遇到了一个部分,我不知道如何将它放在objects类中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"
"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=。。。