如何在 c# (Windows phone 8) 中将 Json 解析为类
本文关键字:Json 中将 phone Windows | 更新日期: 2023-09-27 18:35:26
也许有人知道更好的版本来解决我的问题?
有下一个 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 对象(例如 {"名称":"值"}) 输入类型"client_app。MainPage+RootObject[]' 因为该类型需要 一个 JSON 数组(例如 [1,2,3])以正确反序列化。要解决此问题 错误将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改 反序列化类型,以便它是普通的 .NET 类型(例如,不是 基元类型(如整数),而不是集合类型(如数组或 列表),可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制其 从 JSON 对象反序列化。路径"名称",第 1 行,位置 8。
问题在于 JSon 字符串和根对象之间的映射。我认为这就是导致问题的原因:
"IsEmpty":false
反序列化对象时,JSon 转换器会等待 IsEmpty 属性为布尔类型。事实并非如此,因为它的类型是列表
所以你的根类应该是这样的:
public class RootObject
{
public Name name { get; set; }
public string password { get; set; }
}
请像这样尝试:
var res = JsonConvert.DeserializeObject<List<RootObject>>(result1);
这是您需要反序列化的类集
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);
var ds = new DataContractJsonSerializer(typeof(RootObject[]));
var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
RootObject[] items = (RootObject[])ds.ReadObject(msnew);
这解决了我的问题
您的Name
类具有IsEmpty
作为bools
列表的属性。
所以你应该是:
[
{
"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
值上的方括号,表示该值位于集合中。 如果要分配多个值,则可以使用以下方法添加更多值:
"IsEmpty": [ false, true ]