如何在net-core 2.0中手动解析JSON字符串

问题描述 投票:0回答:4

我有一个具有以下结构的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 中实现这一目标的标准/最简单方法是什么?代码示例将不胜感激。

c# json asp.net-core .net-core .net-core-2.0
4个回答
26
投票
是的。您可以将 Newtonsoft.json 包添加到您的 .net core 项目中。而要查询动态 json 对象,您可以使用库提供的

JObject

 对象将您的 json 解析为动态对象。这是该文档的
链接

鉴于您的 json 示例,它可能看起来像这样

var resource = JObject.Parse(json); foreach (var property in resource.fields.Properties()) { Console.WriteLine("{0} - {1}", property.Name, property.Value); }
    

6
投票

Json.NET 是序列化 .NET 对象时的首选库。但是,当对象结构不是静态时,来自 System.Json 命名空间的 API 将更易于使用。通过从 NuGet 安装软件包,可以在 .NET Core 2.0 中使用 System.Json,如下所示:

dotnet add package System.Json --version 4.4.0

这里有一个关于如何使用 System.Json 命名空间中的 API 的精彩教程:

在 .NET 中使用 JSON – Silverlight 示例


0
投票
就我而言,我需要一个

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);
    

-2
投票
using System.Web.Script.Serialization; using System.Dynamic; var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new DynamicJsonConverter() }); dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));
    
© www.soinside.com 2019 - 2024. All rights reserved.