C# Newtonsoft.Json.Linq.JProperty不包含名称的定义
我正在从以下JSON中提取数据C# Newtonsoft.Json.Linq.JProperty不包含名称的定义,c#,json,oop,json.net,C#,Json,Oop,Json.net,我正在从以下JSON中提取数据 string strResponse = @"[ { 'forename': 'Harry', 'surname': 'Potter', 'house': 'Gryffindor' }, { 'forename': 'Draco', 'surname': 'Malfoy', 'house': 'Slytherin' }, {
string strResponse =
@"[
{
'forename': 'Harry',
'surname': 'Potter',
'house': 'Gryffindor'
},
{
'forename': 'Draco',
'surname': 'Malfoy',
'house': 'Slytherin'
},
{
'forename': 'Luna',
'surname': 'Lovegood',
'house': 'Ravenclaw'
}
]";
我使用的C#如下所示:
dynamic dynJson = JsonConvert.DeserializeObject(strResponse);
foreach (var item in dynJson)
{
string output = string.Format("{0} {1} {2}", item.forename, item.surname, item.house);
Console.WriteLine(output);
}
这工作正常,输出如预期
但是,当JSON的格式稍有不同时,例如:
string strResponse =
@"{
'People': [
{
'forename': 'Harry',
'surname': 'Potter',
'house': 'Gryffindor'
},
{
'forename': 'Draco',
'surname': 'Malfoy',
'house': 'Slytherin'
},
{
'forename': 'Luna',
'surname': 'Lovegood',
'house': 'Ravenclaw'
}
]
}";
我收到以下错误消息:
类型的未处理异常
中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”
System.Core.dll
其他信息:“Newtonsoft.Json.Linq.JProperty”没有
包含“名字”的定义
我知道这与新JSON字符串的结构有关,尤其是
人
部分。但是我不知道如何调整我的代码来处理这个问题,请帮助。这里有一个工作示例。下次请阅读文档
JObject dynJson = JsonConvert.DeserializeObject(strResponse) as JObject;
dynJson.Dump();
foreach (var item in dynJson["People"])
{
string output = string.Format("{0} {1} {2}", item["forename"], item["surname"], item["house"]);
Console.WriteLine(output);
}
为什么您希望不同的JSON以相同的方式运行?第一个是一个具有您期望的属性的对象数组,第二个是一个具有
People
属性的对象,它像以前一样包含一个对象数组。@DavidG抱歉,我试图通过一个简单的示例(第一个JSON)来学习这一点,并重构我的代码,看看我需要为其他JSON字符串更改什么。我看到JSON以第二个JSON字符串的格式显示,我想知道我需要如何更改代码。最好的方法是避免完全使用dynamic,每次使用dynamic
,一只小猫就会死。。。而是创建一组与您的结构相匹配的具体C#类。这样,就可以进行强大的编译时类型检查。在VisualStudio中,复制JSON,然后进入编辑/粘贴特殊菜单并将JSON粘贴为类。