也许有人知道更好的版本来解决我的问题?
有下一个json:
[
{
"name":{
"IsEmpty":false,
"X":-10.5,
"Y":2.47
},
"password":"pas"
},
{
"name":{
"IsEmpty":false,
"X":-10.5,
"Y":2.47
},
"password":"pas"
},
{
"name":{
"IsEmpty":false,
"X":-10.5,
"Y":2.47
},
"password":"pas"
}
]
我想要从json到我的类的解析元素:
public class Name
{
public bool IsEmpty { get; set; }
public double X { get; set; }
public double Y { get; set; }
}
public class RootObject
{
public List<Name> name { get; set; }
public string password { get; set; }
}
...
dynamic res = JsonConvert.DeserializeObject<RootObject[]>(result1);
变量result1是我的json对象。
并且执行,我有:
无法反序列化当前的JSON对象(例如{“name”:“value”}) 到类型'client_app.MainPage + RootObject []'因为类型需要 一个JSON数组(例如[1,2,3])正确反序列化。解决这个问题 错误要么将JSON更改为JSON数组(例如[1,2,3]),要么更改 反序列化类型,以便它是一个普通的.NET类型(例如,不是 原始类型,如整数,而不是像数组或类似的集合类型 List)可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中以强制它 从JSON对象反序列化。路径'名称',第1行,第8位。
答案 0 :(得分:1)
问题在于您的JSon字符串和根对象之间的映射。我认为这是导致问题的原因:
"IsEmpty":false
反序列化对象时,JSon转换器等待IsEmpty属性为 bool 类型。 情况不是这样,因为它的类型是 List
所以你的根类应该是这样的:
public class RootObject
{
public Name name { get; set; }
public string password { get; set; }
}
答案 1 :(得分:0)
请尝试这样:
var res = JsonConvert.DeserializeObject<List<RootObject>>(result1);
答案 2 :(得分:0)
这是您需要反序列化的一组类
public class Name
{
public bool IsEmpty { get; set; }
public double X { get; set; }
public double Y { get; set; }
}
public class Item
{
public Name name { get; set; }
public string password { get; set; }
}
然后
var items = Newtonsoft.Json.JsonConvert.DeserializeObject<Item[]>(json);
答案 3 :(得分:-1)
var ds = new DataContractJsonSerializer(typeof(RootObject[]));
var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
RootObject[] items = (RootObject[])ds.ReadObject(msnew);
这解决了我的问题
答案 4 :(得分:-2)
您的Name
类的IsEmpty
属性为bools
列表。
所以Json应该是:
[
{
"name": {
"IsEmpty": [
false
],
"X": -10.5,
"Y": 2.47
},
"password": "pas"
},
{
"name": {
"IsEmpty": [
false
],
"X": -10.5,
"Y": 2.47
},
"password": "pas"
},
{
"name": {
"IsEmpty": [
false
],
"X": -10.5,
"Y": 2.47
},
"password": "pas"
}
注意IsEmpty
值的sqaure括号,表示值在集合中。如果要分配多个值,则可以使用以下方法添加更多值:
"IsEmpty": [ false, true ]