【问题标题】:Extract JSON data from C# nested dictionary object using JavaScriptSerializer()使用 JavaScriptSerializer() 从 C# 嵌套字典对象中提取 JSON 数据
【发布时间】:2020-04-11 16:35:08
【问题描述】:

在尝试使用JavaScriptSerializerJSON 中提取数据时,在查看object 类型的data 时会遇到特殊困难。 根据以下示例数据,编写了以下代码:

var serializer = new JavaScriptSerializer();
dynamic outp = serializer.DeserializeObject(out3);            
var a = outp["Number"]; // is OK, returns "1"
var b = outp["Description"]; // stuck in looking through "Description" to access "address", then extract the value of "street_2", as an illustration.

反馈(不涉及理想情况下class 与相关properties 的定义)将不胜感激。谢谢。

{
  "Number": 1,
  "Description": [
    {
      "id": "PO1234",
      "country": "TE",
      "No": "4050",
      "safeNo": "LU37",
      "name": "stuck",
      "address": {
        "street_1": "adhoc, 0098, country",
        "street_2": "94 street",
        "city": "stackoverflow",
        "zip": "stack"
      },
      "is_EU": "Y",
      "conti": "E",
      "date": "2019-08-14T21:43:02.000Z"
    }
  ]
}

【问题讨论】:

  • 理想情况下不涉及类的定义,这是因为 JSON 是动态的吗?
  • 一点也不。我猜(谦虚的意见),涉及字典的解决方案相对会更有效,特别是如果一个人有许多来自不同查询的数据要提取。
  • 我认为使用类是最简洁的选择。但这只是我的看法。

标签: c# json api


【解决方案1】:

由于Description 是一个数组,您可以通过索引获取第一项并通过键访问其属性,与Number 相同。在后台Description(以及地址)的每一项都是Dictionary<string, object>

var serializer = new JavaScriptSerializer();
dynamic outp = serializer.DeserializeObject(out3);  

var a = outp["Number"]; 
var b = outp["Description"][0];
var name = b["name"];
var street = b["address"]["street_2"];

不过,不推荐使用JavaScriptSerializer,您应该改用Json.Net

【讨论】:

  • 使用indexation (:) 非常感谢smart 方法,并且您对JavaScripSerializer 的提示已被赞赏。非常感谢,Pavel
【解决方案2】:

您可以使用Newtonsoft.Json 像这样反序列化它:

static string Test()
{
    var filePath = "../../../response.json";
    var text = File.ReadAllText(filePath);

    var result = JsonConvert.DeserializeObject<JObject>(text);

    var data = result
        .GetValue("Description")
        .Select(t => t.Value<JObject>("address"))
        .First()
        .Value<string>("street_2");

    return data;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2021-02-12
    • 2020-05-23
    • 2018-04-20
    相关资源
    最近更新 更多