JSON String :
{
“errno”: 0,
“info”: {
“10”: [
{
“ad_id”: “1”,
“com_id”: “10”,
“pr_id”: “0”,
“name”: “部门1”,
“info”: “”
},
{
“ad_id”: “2”,
“com_id”: “10”,
“pr_id”: “1”,
“name”: “部门2”,
“info”: “”
},
{
“ad_id”: “3”,
“com_id”: “10”,
“pr_id”: “1”,
“name”: “部门3”,
“info”: “”
}
]
}
}
这是通过http post返回的值,为了便于理解,通过Newtonsoft.Json.dll中的方法转换为了object。假如没有红色部分,可用下面的形式得到对象
需要的对象
{
“errno”: 0,
“info”: {
“10”: [
{
“ad_id”: “1”,
“com_id”: “10”,
“pr_id”: “0”,
“name”: “部门1”,
“info”: “”
},
{
“ad_id”: “2”,
“com_id”: “10”,
“pr_id”: “1”,
“name”: “部门2”,
“info”: “”
},
{
“ad_id”: “3”,
“com_id”: “10”,
“pr_id”: “1”,
“name”: “部门3”,
“info”: “”
}
]
}
}
这是通过http post返回的值,为了便于理解,通过Newtonsoft.Json.dll中的方法转换为了object。假如没有红色部分,可用下面的形式得到对象
需要的对象
public class Rtn1 { public string errno; public dept info = new dept(); } public class dept { public string ad_id; public string com_id; public string pr_id; public string name; public string info; }
在post返回后,strRtn为Json字符串
Rtn1 rtn = (Rtn1)JsonConvert.DeserializeObject(strRtn,typeof(Rtn1));
但是,问题中这个的Json格式,其中的“10”,为com_id,是一个值。目前只有一个“10”,在未来可能还会有“11”,“12”,等等。
本人想问问,对于这种格式的Json字符串,怎么能够解析成对象?
望明白人士,给予解答,谢谢!
解决方案
10
不能反序列化为对象。就算是 json 的天然的父亲——javascript,也不支持这种东西啊。设计这个 json 串的人就是 250,找麻烦。
20
public class Rtn1 { public string errno; public Dictionary<string, dept[]> info = new Dictionary<string, dept[]>(); //public dept info = new dept(); } public class dept { public string ad_id; public string com_id; public string pr_id; public string name; public string info; }
Rtn1 rtn = (Rtn1)JsonConvert.DeserializeObject(strRtn, typeof(Rtn1)); Console.WriteLine(rtn.info["10"][1].name); //部门2
10
public Dictionary<string, dept[]> info = new Dictionary<string, dept[]>();
写成
public Dictionary<string, dept[]> info;
就可以了
写成
public Dictionary<string, dept[]> info;
就可以了
10
…数组里有comid为什么属性里还要放comid?
假如是需要comid先做点什么..可以给这个json加上一列comid属性咯
假如是需要comid先做点什么..可以给这个json加上一列comid属性咯
30
Dictonary<string, T> 并不是一个跨平台的技术概念,给你做设计的人一定不是做过跨平台的系统通讯规范设计的。
要保证跨平台,甚至 List<T> 这种设计都应该避免,而应该按照 T[ ] 数组规范去设计协议。例如最基本的类型是
要保证跨平台,甚至 List<T> 这种设计都应该避免,而应该按照 T[ ] 数组规范去设计协议。例如最基本的类型是
public class DeptGroup { public string com_id; public Dept[ ] depts; }
20
使用 rtn.info[“10“] 来访问只是原因是已知有 10 这个键
遍历的话就
foreach(var x in rtn.info)
{
x.Key 就是键(10、11、12)
x.Value 就是 对应的 dept 数组了
遍历的话就
foreach(var x in rtn.info)
{
x.Key 就是键(10、11、12)
x.Value 就是 对应的 dept 数组了