如何在 C# 中访问 JSON 中的值名称

本文关键字:JSON 访问 | 更新日期: 2023-09-27 17:56:47

>目前我有这个:

{
  "example" :{
    "001":{
      "ID":"001",
      "Name":"Test1"  
    },
    "002":{
      "ID": "002",
      "Name": "test2"
    }
  }
}

我正在尝试访问名称,但到目前为止我有以下代码:

   DataRow x = dtNew.NewRow();
   Newtonsoft.Json.Linq.JObject obj =  Newtonsoft.Json.Linq.JObject.Parse(testing);
   x["Name"] = jobj2["example"]["????"]["Name"].ToString();

["001"]部分取决于 ID

如何在 C# 中访问 JSON 中的值名称

您需要了解的第一件事是您的 JSON 无效。您可以使用 JSONLint 来检查您的 JSON 是否有效。JSON 应该是对象数组

有效的 JSON 对象将是:

{
    "example": {
        "001": {
            "ID": "001",
            "Name": "Test1"
        },
        "002": {
            "ID": "002",
            "Name": "test2"
        }
    }
}

在这些更改之后,这对我有用:

DataRow x = dtNew.NewRow();
var obj = Newtonsoft.Json.Linq.JObject.Parse(testing);
x["Name"] = jobj2["example"]["001"]["Name"].ToString();

更新 1:OP 已修复他的 JSON 对象,问题已更改。

实际上,这是另一个问题。如何使用动态子对象名称解析 JSON 对象。

有几种方法可以做到这一点。我建议声明类并以这种方式将此 JSON 对象解析为Dictionary

public class Response
{
    public Dictionary<string, ExampleObj> example { get; set; }
}
public class ExampleObj {
    public string ID { get; set; }
    public string Name { get; set; }
}
// Somewhere in code
string jsonString = "{'"example'" :{ '"001'":{ '"ID'":'"001'", '"Name'":'"Test1'" }, '"002'":{ '"ID'": '"002'", '"Name'": '"test2'" }}}";
var obj = JsonConvert.DeserializeObject<Response>(jsonString);
foreach (var keyValuePair in obj.example)
{
    Console.WriteLine("That's a {0}", keyValuePair.Key);
    Console.WriteLine("It's name is {0}", keyValuePair.Value.Name);
}

JsonConvert会认出这个动态名称"????"(例如,'001')作为动态Dictionary键 - 它的内容将被序列化为ExampleObj类的Dictionary值。

这是一个有效的DotNetFiddle演示。