【问题标题】:How to manually parse a JSON string in net-core 2.0如何在 net-core 2.0 中手动解析 JSON 字符串
【发布时间】: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。

标签: c# json asp.net-core .net-core .net-core-2.0


【解决方案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?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2016-12-05
    • 2014-09-10
    相关资源
    最近更新 更多