当我尝试使用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 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; }
}
一个可靠的代表一组Advices对象:
public class MyAdvices
{
private Advices[] MyAdvicesArrays;
....
所以,当我试图像我那样反序列化我的JSON时:
MyAdvicesArrays= JsonConvert.DeserializeObject<Advices[]>(sMyJSON));
JSON.Net使用正确的值填充MyAdvicesArrays数组中每个对象的“Phase Name”属性,但每个对象的Advices数组无效:“如果在运行时检查它们,则无法计算表达式”。我不明白。我做错了什么?
答案 0 :(得分:1)
根据实体,您的json
无效。
在您的类型更改AdvicesList
至Advices
。
public List<string> AdvicesList { get; set; }
将其更改为
public List<string> Advices { get; set; }
答案 1 :(得分:0)
不,你的JSON和Class一样不正确。
首先将您的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;}
}
注意第一个类是如何用于顶级JSON对象的。这个名字可以是你想要的任何名字。但任何财产都需要与名称相匹配。
答案 2 :(得分:0)
我所做的就是改变Advices
类的定义:
public class Advice
{
public string PhaseName { get; set; }
public List<string> Advices { get; set; }
}
我将班级名称更改为Advice
,将AdvicesList
属性更改为Advices
。