{"count":2, "data":[{"OTW5120055120400001":"index=1\time=2016-01-13 14:17:23\tpin=9342156\tcardno=9342156\teventaddr=1\tevent=0\tinoutstatus=0\tverifytype=4"},{"OTW5120055120400001":"index=12\ttime=2016-01-13 14:17:54\tpin=4273236\tcardno=4273236\teventaddr=1\tevent=2\tinoutstatus=0\tverifytype=4 "}]}
data后面的是数组,数组的组成是键值对,键是根绝请求返回不确定的,求大神指教不按字符串的方式怎么解析这个json数据。
var x = JsonConvert.DeserializeObject<JObject>(str);
var mJObj = JArray.Parse(x["data"].ToString());
foreach (var ss in mJObj ) //查找某个字段与值
{
Dictionary<string,string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(ss.ToString());
foreach (KeyValuePair<string, string> temp in dic)
{
System.Diagnostics.Debug.WriteLine(string.Format("key:{0} value:{1}",temp.Key,temp.Value));
}
}
结果:
key:OTW5120055120400001 value:index=1 ime=2016-01-13 14:17:23 pin=9342156 cardno=9342156 eventaddr=1 event=0 inoutstatus=0 verifytype=4
key:OTW5120055120400001 value:index=12 time=2016-01-13 14:17:54 pin=4273236 cardno=4273236 eventaddr=1 event=2 inoutstatus=0 verifytype=4
更加精简一点
var x = JsonConvert.DeserializeObject<JObject>(str);
(x["data"]).Values().ToList().ForEach(u => System.Diagnostics.Debug.WriteLine(((JProperty)u).Value));
@金钱: 知道这种方法,只不过我取到他的value之后还得进行字符串操作,然后给对象的每个属性赋值。
thanks,受教了。
那就反序列化成键值对
譬如?
如果是json数据反序列化的应该需要提供提供对象来接收反序列化,你的意思是不确定对象属性,所以没办法使用反序列化吗?object类型呢?
c#自带的对json数据进行序列化和反序列化是转换成对象进行操作的,对象就是属性然后值。我那个json数据对应的那个前面的key是变化的也就是属性的名称是变化的,和object没关系,按照上面那哥们给的方式我通过第三方Newtonsoft.Json这个程序集取键值对然后操作。
随便找个JSON在线的解析工具,你就能得到你想要的结果了