请问用 Newtonsoft.Json 如何解析如下JSON字符串各属性的值?
{
"form": "TyGOun",
"entry": {
"serial_number": 38,
"field_21": "销售",
"field_22": "2014-09-26",
"field_23": {
"level_1": "养生壶",
"level_2": "QOK100001000"
},
"field_24": 1,
"field_25": 1222,
"field_26": "",
"field_27": "2",
"x_field_weixin_nickname": "",
"x_field_weixin_gender": "",
"x_field_weixin_country": "",
"x_field_weixin_province_city": {},
"x_field_weixin_openid": "",
"x_field_weixin_headimgurl": "",
"creator_name": "kensheng",
"created_at": "2014-09-26T01:20:16Z",
"updated_at": "2014-09-26T01:20:16Z"
}
}
如:serial_number ?
field_1?
created_at ? (时间)
谢谢,豆不多,求大神
List<formJin> result = JsonConvert.DeserializeObject<List<formJin>>(data)
这句话解析有错误,是对象的属性建立的有问题吗?
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type
对象属性:
public class entry { public string serial_number { get; set; } public string field_21 { get; set; } public string field_22 { get; set; } public string field_23 { get; set; } public string field_24 { get; set; } public string field_25 { get; set; } public string field_26 { get; set; } public string field_27 { get; set; } public string creator_name{ get; set;} public string created_at { get; set; } public entry() { serial_number = this.serial_number; field_21 = this.field_21; field_22 = this.field_22; field_23 = this.field_23; field_24 = this.field_24; field_25 = this.field_25; field_26 = this.field_26; field_27 = this.field_27; creator_name = this.creator_name; created_at = this.created_at; } }
public class formJin { public string form { get; set; } public List<entry> entrys { get; set; } public formJin() { form = this.form; entrys = this.entrys; } }
List<formJin> result = JsonConvert.DeserializeObject<List<formJin>>(data); foreach (entry s in result[0].entrys) { Response.Write(s.serial_number); }
直接这样,不用定义任何class:
JObject obj = JObject.Parse(data);
string serial_number = obj["entry"]["serial_number"].ToString();
string level_1 = obj["entry"]["field_23"]["level_1"].ToString();
这个真好,方便,简单
也解决了我的一个问题。
太棒了,真方便!
你用JSON里面的反序列化函数,可以将此字符串反序列化为一个对象,在WATCH里面看看就知道应该自选定义这个类了。
象你这样的要定义两个类。
一个是Entry类,这个也是你最终要用的,另外一个是外面的这个包装类。
意思有点明白了,
但不会实现
楼上说得好。
JsonConvert有个反序列化方法,只需要传递一个实体type就行了。
你的实体可以如下定义:
class Test { public string form{get;set;} //保持属性和JSON的属性key一致 [JsonProperty("form")] public string Form{get;set;} //通过特性的方式来设置映射关系 }
意思有点明白了,但不知道怎么实现
@kensheng: 代码都贴出来了嘛。就是把属性这样写了。然后直接反序列化就行了。你可以搜索下Json反序列化,文章太多了。
有一个json的插件,可以序列化和反序列化
没有对象 你跟我说啥属性
public static string GetJsonValue(string json, string key)
{
try
{
JArray jsonObj = (JArray)JsonConvert.DeserializeObject(json);
return jsonObj[0][key].ToString();
}
catch (Exception)
{
return "";
}
}
顶。这个方法比较正确,解决了困扰我3天的问题。
网上找的具体的工具类 JsonReader reader = new JsonTextReader(new StringReader(“你的json格式的字符串”));reader就是json对象了,点操作可以获取属性了
这样的JSON字符串没有[] 包起来,仔细看看,还是不知道怎么解析
@kensheng: 你试过么?我觉得应该是一样的啊?
直接使用JavascriptSerializer就可以了
class ExampleObject{public string form{get;set;} public list<Entity> Entities{get;set;})
然后 JavascriptSerializer ser=new JavascriptSerializer();
List<ExampleObject> result=ser.serialize<List<ExampleObject>>(inputString)
这个貌似不行,
规范的json能搜到无数的处理方法,不规范的,当然只能自己截取字符串解析了,正则啊,查找指定字符之类的呗,或者参考下微软解析的方法
貌似不行
@kensheng: 截取{和:,取key和value为什么不行
@draculav: 去不到值