string jsontest = "{\"message\":\"获取成功\",\"responseCode\":\"000000\",\"data\":{\"id\":\"E0Q10AzOXSsmsituSpsNLN2DT9KlIvZf94a\",\"data\":null,\"token\":null,\"local\":\"CN\",\"username\":null,\"createTime\":\"1406016650423\",\"login\":\"15102144265\",\"userid\":\"c00050001629\",\"dataSrc\":\"00\",\"funcBmp\":\"6160\",\"userStatus\":\"1\",\"pwdMd\":\"0\",\"mobile\":\"15102144265\",\"welcomeWord\":\"welcome my kingd\",\"loginName\":\"15102144265\",\"email\":null,\"ip\":null,\"lastLoginTime\":\"2014-07-22 04:10:50\",\"destId\":null,\"relateId\":\"50001629\",\"unionFlag\":\"0\"}}";
如何用Newtonsoft.Json一次都解析出来?
可以使用序列化,定义一个对应你Json格式的实体,序列化一下就可以了。
//JsonModel 根据你的Json字符串设计的Model,属性自己补充完吧,太多了.
var jsonList= Newtonsoft.Json.JsonConvert.DeserializeObject<JsonModel>(jsontest);
public class JsonModel
{
public string Message { get; set; }
public string ResponseCode { get; set; }
public DataClass Data { get; set; }
}
public class DataClass
{
public string Id { get; set; }
public string Data { get; set; }
public string Token { get; set; }
public string Local { get; set; }
public string Username { get; set; }
public string CreateTime { get; set; }
}
Dictionary<string, string> _dic2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsontest);
string id = "", data = "", userid = "";
//取值
_dic2.TryGetValue("id", out id);
_dic2.TryGetValue("data", out data);
_dic2.TryGetValue("userid", out userid);
能不能像这样直接读取,总感觉实体类比较麻烦的!
@十里外教堂: 你代码都写了,为什么不运行调试一下呢?
@晓菜鸟: 调试过,报错了,所以出来请教各位大虾的!
@十里外教堂: 好的,我来看看。
@十里外教堂: 是会报错的,因为你的Json里面的Data里面对应的也是Json,你用Dictionary<string, string>是没有办法解析出来的。
@十里外教堂: 可以他们会觉得其他的一些东西挺好用的,但是我感觉.Net封装的这个也不错啊。
@晓菜鸟: 我用实体类的方法做出来了,用linq to json也是可以做出来的,Jayrock也是可以做的,这些我都试过的,感觉还是实体类要常规一点。
@十里外教堂: 嗯,多多尝试是好的。
定义一个正确的实体类就能解析出来了.
data是一个对象.再定义个符合data格式的实体类就行
string jsontest = "{\"message\":\"获取成功\",\"responseCode\":\"000000\",\"data\":{\"id\":\"E0Q10AzOXSsmsituSpsNLN2DT9KlIvZf94a\",\"data\":null,\"token\":null,\"local\":\"CN\",\"username\":null,\"createTime\":\"1406016650423\",\"login\":\"15102144265\",\"userid\":\"c00050001629\",\"dataSrc\":\"00\",\"funcBmp\":\"6160\",\"userStatus\":\"1\",\"pwdMd\":\"0\",\"mobile\":\"15102144265\",\"welcomeWord\":\"welcome my kingd\",\"loginName\":\"15102144265\",\"email\":null,\"ip\":null,\"lastLoginTime\":\"2014-07-22 04:10:50\",\"destId\":null,\"relateId\":\"50001629\",\"unionFlag\":\"0\"}}";
//反序列化JSON
Dictionary<string, string> _dic2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsontest);
if (_dic2.Count > 0)
{
string id = "", data = "", userid = "";
//取值
_dic2.TryGetValue("id", out id);
_dic2.TryGetValue("data", out data);
_dic2.TryGetValue("userid", out userid);
}
能不能像这样,直接读取出来的,一层的大括号是可以的读取的,两层就不是很清楚了。
@十里外教堂: 不行的,这种东西是没办法通用的,你去了解一下json格式吧.
json外层有2种可能,数组和对象.当外层为对象时才可以像你这样用keyvalue来解析,外层要是为数组,这个keyvalue就解析不了.你可以尝试下dcitonary<string,动态对象>
Jayrock 用这个吧。
第一次用 Jayrock,但是得到的对象时空的。不清楚是怎么回事
json.net
json.net 好像也是需要建实体类的吧!
@十里外教堂: 不需要建实体类
@wolfy: 能不能详细的给我说说。
@十里外教堂: http://www.cnblogs.com/wolf-sun/p/3671792.html你可以看看我这篇文章,之前搜集的
@wolfy: 使用linq to Json 的方式
@wolfy: 好的,谢谢
@wolfy: 我一个一个的取值,是都可以得到的。但是我想试试这个,报错了。
@十里外教堂: 格式不一样 ,只能单个取了,我那个后面是一个数组