c# 使用Newtonsoft.Json 对数据进行打包与解析

来源:互联网 发布:线切割编程系统 编辑:程序博客网 时间:2024/06/07 07:12

Newtonsoft.Json.dll 的下载就不多说了,网上很多

1.打包

可以根据自己的消息需求,建立一个类存在消息类容

如:public class Message

{

public string msgtype;

public string msgreq;

public string dpto;

        }

打包的方法为:

Message msg = new Message();

msg.msgtype = "login";

msg.msgreq = "1";

msg.dpto = "user";

string strJson = GetMessage(msg);

public static string GetMessage(Message msg)
        {
            string result = JsonConvert.SerializeObject(msg, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

//SerializeObject  第一个参数是放的Message的对象,第一个参数是指定是否格式化,第三个是格式化的方式(这里选择的是忽略值为空的属性)
            return result;
        }


解包的方法:

public static string GetSValue(string message, string key) 
        {
            JObject jobject = (JObject)JsonConvert.DeserializeObject(message);


            string resultStr = "";
            if (key.IndexOf(".") > -1)
            {
                string[] sArray = key.Split('.');
                foreach (string i in sArray)
                {
                    if (i == sArray[sArray.Count() - 1])
                    {
                        resultStr = jobject[i].ToString();
                    }
                    else
                    {
                        jobject = (JObject)jobject[i];
                    }
                }
            }
            else
            {
                resultStr = jobject[key].ToString();
            }


            return resultStr;
        }


        public static JObject GetOValue(string message, string key)
        {
            JObject jobject = (JObject)JsonConvert.DeserializeObject(message);
            JObject jo = new JObject();
            if (key.IndexOf(".") > -1)
            {
                string[] sArray = key.Split('.');
                foreach (string i in sArray)
                {
                    if (i == sArray[sArray.Count() - 1])
                    {
                        jo = (JObject)jobject[i];
                    }
                    else
                    {
                        jobject = (JObject)jobject[i];
                    }
                }
            }
            else
            {
                jo = (JObject)jobject[key];
            }
            return jo;
        }


        public static JArray GetAValue(string message, string key)
        {
            JObject jobject = (JObject)JsonConvert.DeserializeObject(message);
            JArray jarray = new JArray();
            if (key.IndexOf(".") > -1)
            {
                string[] sArray = key.Split('.');
                foreach (string i in sArray)
                {
                    if (i == sArray[sArray.Count() - 1])
                    {
                        jarray = (JArray)jobject[i];
                    }
                    else
                    {
                        jobject = (JObject)jobject[i];
                    }
                }
            }
            else
            {
                jarray = (JArray)jobject[key];
            }


            return jarray;
        }


这里提供了三种不同返回的解包方式,可根据自己需要调用不用的函数

以下面的Json 为例:

{

"msgtype": "login",
"msgseq": "111",
"msgdata": {
"usrauth": ["Event", "Doors", "TA"],
"token": "1804289383",
"servlist": [["1", "1", "server1", "192.168.1.252", "30000", "1234567890"], ["2", "2", "server2", "192.168.1.253", "30000", "1234567891"]]
},

"msgresult": "ok"

}


如果现在要获取msgseq 的value

rec 为接收的Json字符串

Console.WriteLine(GetSValue(rec,"msgseq"))

获取msgdata下面的msgresult

Console.WriteLine(GetSValue(rec,"msgdata.msgseq"));

获取msgdata下面的usrauth 数组

JArray jarray = GetAValue(rec, "msgdata.usrauth");
            for (int i = 0; i < jarray.Count; i++)
            {
                Console.WriteLine(jarray[i].ToString());
            }

获取msgdata下面的servlist 

List<Server> ser = new List<Server>();

JArray jarray = OperatorMsg.GetAValue(rec, "msgdata.servlist");
            for (int i = 0; i < jarray.Count; i++)
            {
                JArray ja = (JArray)jarray[i];
                Server serv = new Server();
                serv.id = int.Parse(ja[1].ToString());
                serv.name = ja[2].ToString();
                serv.ip = ja[3].ToString();
                serv.port = int.Parse(ja[4].ToString());
                serv.token = int.Parse(ja[5].ToString());
                ser.Add(serv);
            }

0 0
原创粉丝点击