目前我有这个:
{
"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
答案 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
键 - 其内容将被序列化为Dictionary
类ExampleObj
。
这是一个有效的DotNetFiddle Demo。