提问人:Wouter Vandenputte 提问时间:11/3/2023 更新时间:11/3/2023 访问量:28
.NET JSON:检查结构
.NET JSON: check structure
问:
我知道我可以使用解析函数和捕获异常来检查字符串是否是有效的 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 字符串,但它不遵守 的结构,因为它的属性不是 的属性。但是,如果我收到以下字符串s1
MyClass1
Something
MyClass1
s2
{
"Key1": "Hello",
"Key2": [
{ "Key4": 100 }
]
}
那么即使缺少属性,这对我来说也是有效的。正式地说,给定的属性必须恰好是模型属性的子集。
如何在 .NET 中实现此目的?请注意,这可能是通用的,因此我无法硬检查名称。MyClass
答:
0赞
GuestTryingTohelp
11/3/2023
#1
简单地说,你可以创建一个函数来对传入对象的每个属性进行foreach,如果整个对象与你的“MyClass”不匹配,则返回“False”
亲切问候
评论
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 架构:-)
评论