C# JSON.Net、JsonConvert.DeserializeObject-反序列化问题
当我试图用JSON.Net反序列化JSON时,它为JSON数组提供了无效值 我有简单的JSON:C# JSON.Net、JsonConvert.DeserializeObject-反序列化问题,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,当我试图用JSON.Net反序列化JSON时,它为JSON数组提供了无效值 我有简单的JSON: [ { "PhaseName": "Start", "Advices": ["Lorem ipsum dolor", "Lorem ipsum dolor", "Lorem ipsum dolor"] }, { "PhaseName": "In Progress", "Advices": ["Lorem ipsum dolor", "Lorem
[
{
"PhaseName": "Start",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
},
{
"PhaseName": "In Progress",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
},
{
"PhaseName": "Finish",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
}
]
我的代码中有一个对应类:
public class Advices
{
public string PhaseName { get; set; }
public List<string> AdvicesList { get; set; }
}
因此,当我尝试像这样反序列化JSON时:
MyAdvicesArrays= JsonConvert.DeserializeObject<Advices[]>(sMyJSON));
MyAdvicesArray=JsonConvert.DeserializeObject(sMyJSON));
JSON.Net使用正确的值填充MyAdvicesArray数组中每个对象的“阶段名称”属性,但每个对象的Advices数组无效:“无法计算表达式”,如果您在运行时检查它们。我不明白。我做错了什么?根据实体,您的
json
无效
在您的类型中,将AdvicesList
更改为Advices
public List<string> AdvicesList { get; set; }
public List AdvicesList{get;set;}
换成
public List<string> Advices { get; set; }
公共列表建议{get;set;}
不,您的JSON和您的类一样不正确
首先将JSON更改为:
{
phases:[
{
"PhaseName": "Start",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
},
{
"PhaseName": "In Progress",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
},
{
"PhaseName": "Finish",
"Advices": ["Lorem ipsum dolor",
"Lorem ipsum dolor",
"Lorem ipsum dolor"]
}
]
}
请注意,在您没有正确声明JSON对象之前。此外,还需要数组的属性
现在需要两个类:
public class AnythinYouWant{
public List<Phase> Phases{get;set;}
}
public class Phase{
public string PhaseName{get;set;}
public List<string> Advices{get;set;}
}
任何你想要的公共类{
公共列表阶段{get;set;}
}
公共课阶段{
公共字符串PhaseName{get;set;}
公共列表建议{get;set;}
}
注意第一个类是如何用于顶级JSON对象的。名称可以是您想要的任何名称。但是任何属性都需要与名称匹配。我所做的一切就是更改
advictions
类的定义:
public class Advice
{
public string PhaseName { get; set; }
public List<string> Advices { get; set; }
}
公共类建议
{
公共字符串PhaseName{get;set;}
公共列表建议{get;set;}
}
我将类名更改为just
Advice
并将AdvicesList
属性更改为Advices
我不明白,除了类名和属性名之外,您更改了什么?类的定义还是一样的。谢谢,听起来很合乎逻辑。那么,这是否意味着我不能像我的示例中那样在JSON中拥有未命名的对象数组?[{“example”:1,“example2”:“TestName”},{“example3”:1,“example4”:“TestName”}]不,您不能这样做,因为您的json对象必须始终以{}开头,您不能用[]声明它。在初始{}之后,必须有一个属性来分配第一个数组。在我的示例中,“Advices”应该是一个具有string属性和array属性的对象,它怎么可能是List呢?
public class Advice
{
public string PhaseName { get; set; }
public List<string> Advices { get; set; }
}