.NET JSON:检查结构

.NET JSON: check structure

提问人:Wouter Vandenputte 提问时间:11/3/2023 更新时间:11/3/2023 访问量:28

问:

我知道我可以使用解析函数和捕获异常来检查字符串是否是有效的 JSON 格式字符串。但我需要的还不止于此。

我需要检查传入的字符串是否符合JSON格式的某个模型。

例如,我有这个类

class MyClass {
  public String Key1 { get; set; }
  public List<MyClass2> Key2 { get set; }
  public int Key3 { get set; }
}

class MyClass2 {
  public int Key4 { get; set; }
}

并输入以下字符串s1

{
  "Key1": "Hello",
  "Something": "World",
  "Key2": [
     { "Key4": 100 }
  ],
  "Key3": 2
}

尽管 IS 是格式有效的 JSON 字符串,但它不遵守 的结构,因为它的属性不是 的属性。但是,如果我收到以下字符串s1MyClass1SomethingMyClass1s2

{
  "Key1": "Hello",
  "Key2": [
     { "Key4": 100 }
  ]
}

那么即使缺少属性,这对我来说也是有效的。正式地说,给定的属性必须恰好是模型属性的子集

如何在 .NET 中实现此目的?请注意,这可能是通用的,因此我无法硬检查名称。MyClass

JSON .NET json.net

评论


答:

0赞 GuestTryingTohelp 11/3/2023 #1

简单地说,你可以创建一个函数来对传入对象的每个属性进行foreach,如果整个对象与你的“MyClass”不匹配,则返回“False”

亲切问候

评论

0赞 Community 11/6/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
1赞 phuzi 11/3/2023 #2

JSON Schema 是一回事,我认为应该用于验证 JSON

有许多不同的实现,其中一些是针对 .NET 的甚至还有一个来自 NewtonSoft - JSON.Net Schema,尽管它不是完全免费的

使用 JsonSchema.Net 的示例

using Json.Schema;
using Json.Schema.Generation;
using Json.Schema.Serialization;

var json = @"{
  ""Key1"": ""Hello"",
  ""Something"": ""World"",
  ""Key2"": [
     { ""Key4"": 100 }
  ],
  ""Key3"": 2
}";

var schema = new JsonSchemaBuilder()
    .FromType<MyClass>()
    // Fail the validation if there any additional properties.
    .AdditionalProperties(JsonSchema.False)
    .Build();

var evaluationResults = schema.Evaluate(System.Text.Json.JsonDocument.Parse(json));

if (!evaluationResults.IsValid){
    // Log/throw an error here.
}

评论

0赞 Jacek 11/3/2023
即将建议Newtonsoft JSON.Net 架构:-)