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

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值