首页 新闻 会员 周边

ASP.NET解析JSON 字符串

0
悬赏园豆:80 [已解决问题] 解决于 2014-09-26 18:01

请问用 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);
                      
                }
kensheng的主页 kensheng | 初学一级 | 园豆:80
提问于:2014-09-25 12:24
< >
分享
最佳答案
1

直接这样,不用定义任何class:
 JObject obj = JObject.Parse(data);

 string serial_number = obj["entry"]["serial_number"].ToString();

 string level_1 = obj["entry"]["field_23"]["level_1"].ToString();

收获园豆:80
自由_ | 菜鸟二级 |园豆:440 | 2014-09-26 14:20

这个真好,方便,简单

kensheng | 园豆:80 (初学一级) | 2014-09-26 18:00

也解决了我的一个问题。

I-Can | 园豆:121 (初学一级) | 2015-03-25 17:44

太棒了,真方便!

荆棘人 | 园豆:410 (菜鸟二级) | 2016-01-06 16:20
其他回答(8)
0

 你用JSON里面的反序列化函数,可以将此字符串反序列化为一个对象,在WATCH里面看看就知道应该自选定义这个类了。

象你这样的要定义两个类。

一个是Entry类,这个也是你最终要用的,另外一个是外面的这个包装类。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-09-25 12:37

意思有点明白了,

但不会实现

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 12:59
0

楼上说得好。

JsonConvert有个反序列化方法,只需要传递一个实体type就行了。

你的实体可以如下定义:

 

class Test
{
    public string form{get;set;} //保持属性和JSON的属性key一致

    [JsonProperty("form")]
    public string Form{get;set;} //通过特性的方式来设置映射关系
}
幻天芒 | 园豆:37175 (高人七级) | 2014-09-25 12:41

意思有点明白了,但不知道怎么实现

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 12:58

@kensheng: 代码都贴出来了嘛。就是把属性这样写了。然后直接反序列化就行了。你可以搜索下Json反序列化,文章太多了。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-09-25 13:09
0

有一个json的插件,可以序列化和反序列化

最长的路漫漫 | 园豆:252 (菜鸟二级) | 2014-09-25 13:24
0

没有对象 你跟我说啥属性

隔壁老王来了 | 园豆:99 (初学一级) | 2014-09-25 14:28
0

        public static string GetJsonValue(string json, string key)
        {
            try
            {
                JArray jsonObj = (JArray)JsonConvert.DeserializeObject(json);
                return jsonObj[0][key].ToString();
            }
            catch (Exception)
            {
                return "";
            }
        }

只会造轮子 | 园豆:2274 (老鸟四级) | 2014-09-25 14:56

顶。这个方法比较正确,解决了困扰我3天的问题。

0

网上找的具体的工具类   JsonReader reader = new JsonTextReader(new StringReader(“你的json格式的字符串”));reader就是json对象了,点操作可以获取属性了

湖底的鱼 | 园豆:10 (初学一级) | 2014-09-25 15:05

这样的JSON字符串没有[] 包起来,仔细看看,还是不知道怎么解析

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 15:58

@kensheng: 你试过么?我觉得应该是一样的啊?

支持(0) 反对(0) 湖底的鱼 | 园豆:10 (初学一级) | 2014-09-25 16:23
0

直接使用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)

小白哥哥 | 园豆:202 (菜鸟二级) | 2014-09-25 16:22

这个貌似不行,

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 17:22
0

规范的json能搜到无数的处理方法,不规范的,当然只能自己截取字符串解析了,正则啊,查找指定字符之类的呗,或者参考下微软解析的方法

draculav | 园豆:734 (小虾三级) | 2014-09-25 17:00

貌似不行

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 17:22

@kensheng: 截取{和:,取key和value为什么不行

支持(0) 反对(0) draculav | 园豆:734 (小虾三级) | 2014-09-25 17:40

@draculav: 去不到值

支持(0) 反对(0) kensheng | 园豆:80 (初学一级) | 2014-09-25 18:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册