C#中的动态对象

时间:2019-07-17 10:51:13

标签: c# json

我正在尝试使用JSON定义数据结构,并使用具有JSON定义的结构定义来验证实际数据。我正在c#中尝试这个。

例如:

"PlayerScore":{
        "fields":[
            {
                "name":"Runs",
                "type":"short",
                "isRequired":true
            },
            {
                "name":"Wickets",
                "type":"byte",
                "isRequired":false
            }               
        ]

上面是数据结构的定义。下面是实际数据。

{
    "Runs": 20,
    "Wickets": 1
},
{
    "Runs": 20
}

仅当它是必填字段时,我才想验证“运行”和“检票”的数据类型。

2 个答案:

答案 0 :(得分:1)

不是很了解您,但是如果您尝试根据Json Schema验证json。这篇文章可能是您需要的。 Json Schema Validation

不确定为什么要走那条路线。您足以建立一个C#模型并使用数据注释针对它验证json吗? (假设是api)在这里Data Annotations

了解它们

答案 1 :(得分:1)

Newtonsoft的Json.NET(https://www.nuget.org/packages/Newtonsoft.Json/)支持JSON验证及其模式。这是他们文档中的示例。

验证返回真的样本

string schemaJson = @"{
  'description': 'A person',
  'type': 'object',
  'properties':
  {
    'name': {'type':'string'},
    'hobbies': {
      'type': 'array',
      'items': {'type':'string'}
    }
  }
}";

JsonSchema schema = JsonSchema.Parse(schemaJson);

JObject person = JObject.Parse(@"{
  'name': 'James',
  'hobbies': ['.NET', 'Blogging', 'Reading', 'Xbox', 'LOLCATS']
}");

bool valid = person.IsValid(schema);
// true

验证返回假的示例

JsonSchema schema = JsonSchema.Parse(schemaJson);

JObject person = JObject.Parse(@"{
  'name': null,
  'hobbies': ['Invalid content', 0.123456789]
}");

IList<string> messages;
bool valid = person.IsValid(schema, out messages);
// false
// Invalid type. Expected String but got Null. Line 2, position 21.
// Invalid type. Expected String but got Float. Line 3, position 51.

https://www.newtonsoft.com/json/help/html/JsonSchema.htm