我有一个具有以下结构的json字符串
{
"resource": "user",
"method": "create",
"fields": {
"name": "John",
"surname: "Smith",
"email": "[email protected]"
}
}
字段内的键是可变的,这意味着我事先不知道它们
因此,我需要遍历 json,而不是将 json 字符串反序列化为对象,以便获取字典或类似内容中的fields 内的属性。
我听说过 Json.NET 库,它能够解析动态 json,但我不确定它是否已经包含在 net-core 中。在 net-core 2.0 中实现这一目标的标准/最简单方法是什么?代码示例将不胜感激。
JObject
对象将您的 json 解析为动态对象。这是该文档的链接。 鉴于您的 json 示例,它可能看起来像这样
var resource = JObject.Parse(json);
foreach (var property in resource.fields.Properties())
{
Console.WriteLine("{0} - {1}", property.Name, property.Value);
}
dotnet add package System.Json --version 4.4.0
这里有一个关于如何使用 System.Json 命名空间中的 API 的精彩教程:
serialization
+
deserialization
开箱即用的支持功能(无第 3 方库)。考虑到
JSON
几乎无处不在并且
.net core
项目已经成熟,实现这些功能似乎是合乎逻辑的 我关注了这篇
很棒的文章,它解释了System.Text.Json
新的实现
简而言之:您可以选择使用类对所需数据进行建模,或使用通用实现,以便以更通用的方式解析 JSON 文档
文章中很好地介绍了这两个选项。只需添加一个简短的代码片段即可回答原始问题
var json = @"{""hello"":""world""}";
var options = new JsonDocumentOptions
{
AllowTrailingCommas = true
};
var doc = JsonDocument.Parse(json, options);
using System.Web.Script.Serialization;
using System.Dynamic;
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));