如何在C#中访问JSON值的Name

时间:2015-06-18 05:30:28

标签: c# json

目前我有这个:

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

我正在尝试访问Name,但到目前为止我有这段代码:

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

["001"]部分取决于ID

1 个答案:

答案 0 :(得分:3)

您需要了解的第一件事是您的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键 - 其内容将被序列化为DictionaryExampleObj

这是一个有效的DotNetFiddle Demo