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

Posted

技术标签:

【中文标题】如何在 net-core 2.0 中手动解析 JSON 字符串【英文标题】:How to manually parse a JSON string in net-core 2.0 【发布时间】:2018-02-12 06:38:04 【问题描述】:

我有一个具有以下结构的 json 字符串


    "resource": "user",
    "method": "create",
    "fields": 
        "name": "John",
        "surname: "Smith",
        "email": "john@gmail.com"
    

fields里面的键是可变的,也就是说我事先不知道它们

因此,我不需要将 json 字符串反序列化为对象,而是需要遍历 json,以便在 Dictionary 或类似的东西中获取 fields 内的属性。

我听说过 Json.NET 库,它能够解析动态 json,但我不确定它是否已经包含在 net-core 中。

在 net-core 2.0 中实现这一目标的标准/最简单的方法是什么。代码示例将不胜感激。

【问题讨论】:

是的,您可以在 .NET Core 中使用 Json.NET。 【参考方案1】:

是的。您可以将 Newtonsoft.json 包添加到您的 .net 核心项目中。而查询动态json对象,可以使用库提供的JObject对象,将你的json解析成动态对象。这是文档的link。

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

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

【讨论】:

这对我有用:foreach (var property in resource.Properties())【参考方案2】:

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:Working with JSON in .NET – a Silverlight example

【讨论】:

【参考方案3】:
using System.Web.Script.Serialization;
using System.Dynamic;

var serializer = new javascriptSerializer();
serializer.RegisterConverters(new[]  new DynamicJsonConverter() );
dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));

【讨论】:

这是用什么包? System.Json?

以上是关于如何在 net-core 2.0 中手动解析 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章

将字符串数组发布到 .net-core mvc

EF Core 2.0中如何手动映射数据库的视图为实体

如何使用 JOOQ 和 Spring-boot 2.0 进行手动事务管理?

如何使用 scala 在 playframework 2.0 中重用异常解析器

vue.js 2.0中使用less

Linq 查询在 ASP.NET-Core 3.0 及更高版本中对数字等字符串进行排序