首页 > c#如何解析json?

c#如何解析json?

{
    "retcode": 0,
    "result": [
        {
            "poll_type": "message",
            "value": {
                "msg_id": 32065,
                "from_uin": 2246865592,
                "to_uin": 1589188359,
                "msg_id2": 605408,
                "msg_type": 9,
                "reply_ip": 178848417,
                "time": 1352614319,
                "content": [
                    [
                        "font",
                        {
                            "size": 10,
                            "color": "000000",
                            "style": [
                                0,
                                0,
                                0
                            ],
                            "name": "\u9ED1\u4F53"
                        }
                    ],
                    "hi "
                ]
            }
        }
    ]
}

请问如何用Newtonsoft.Json或其他类库取出hi这个值,感激不尽!


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Linq;

namespace cscliTest
{
    public class Font
    {
        public int size;
        public int color;
        public string name;
        public List<int> style = new List<int>();
    }
    public class Content
    {
        public string hi;
        public Font font = new Font();
    }

    public class Value
    {
        public int msg_id;
        public uint from_uin;
        public uint to_uin;
        public int msg_id2;
        public int msg_type;
        public int reply_ip;
        public int time;
        public List<Content> content = new List<Content>();
    }
    public class Result
    {
        public string poll_type;
        public Value value;
    }
    public class sss
    {
        public int retcode;
        public List<Result> result = new List<Result>();
    }

    public class Test
    {
        public int m_a;
        public int a
        {
            get;
            set;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //测试数据
            sss a = new sss();
            a.retcode = 0;
            Result r = new Result();
            Value v = new Value();
            Content c = new Content();
            Font f = new Font();
            f.size = 10;
            f.color = 0;
            f.style = new List<int>(new int[] { 0, 0, 0 });
            f.name = "xxx";
            c.font = f;
            c.hi = "hello";

            v.msg_id = 32065;
            v.from_uin = 2246865592;
            v.to_uin = 1589188359;
            v.msg_id2 = 605408;
            v.msg_type = 9;
            v.reply_ip = 178848417;
            v.time = 1352614319;
            v.content.Add(c);
            r.value = v;
            a.result.Add(r);
            string xx = JsonConvert.SerializeObject(a);
            Console.WriteLine(xx);

            //方法一(需定义上面那些类)
            sss a2 = (sss)JsonConvert.DeserializeObject<sss>(xx);
            Console.WriteLine(a2.retcode);

            //方法二(不需定义上面那些类)
            JObject o = (JObject)JsonConvert.DeserializeObject(xx);
            JToken o2 = o["result"][0];
            JToken o3 = o2["value"];
            JToken o4 = o3["content"][0];
            JToken o5 = o4["hi"];
            Console.WriteLine(o5.ToString());
            
        }
    }
}

感觉content后面的两个[[格式有问题,所以我这里的和你的格式有点差别,请注意。
以前做过,今天翻了下,网上的太乱,以至于弄了挺久。


1.引用Newtonsoft.Json
2.写一个反序列化Josn的类
例如我有一个这样的

{
    "from": "en",
    "to": "zh",
    "trans_result": [
        {
            "src": "today",
            "dst": "今天"
        },
        {
            "src": "tomorrow",
            "dst": "明天"
        }
    ]
}

对应的反序列化的类

    public class TranslateResult
    {
        public string from { get; set; }
        public string to { get; set; }
        public List<TResult> trans_result{get;set;}
    }
    public class TResult
    {
        public string src{get;set;}
        public string dst{get;set;}
    }

3.然后就是使用了

TranslateResult translateResult = new TranslateResult();
translateResult =JavaScriptConvert.DeserializeObject(Json文本, typeof(TranslateResult))as TranslateResult;

var ser = new JavaScriptSerializer();
return ser.Deserialize<TResult>(json);

JavaScriptSerializer类在System.Web.Script.Serialization 需引入 System.Web.Extensions dll


Json.net的lib本身就提供了.

前几位就有说了,jobject是个比较偷懒的方法.

【热门文章】
【热门文章】