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());
}
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);
}
- c# 使用Newtonsoft.Json 对数据进行打包与解析
- C# 使用Newtonsoft.Json解析嵌套json
- c#操作json数据使用newtonsoft.json
- C# 解析JSON -- Newtonsoft.Json
- C# 解析json Newtonsoft.json
- Newtonsoft.Json解析json数据
- C#解析Json数据(利用Newtonsoft.Json库)
- mvc 使用Newtonsoft.Json进行序列化json数据
- C#使用LitJson对Json数据解析
- Asp.net C# 使用Newtonsoft.Json 进行通信
- C# newtonsoft.json.dll 解析Json
- Newtonsoft.Json.DLL 解析Json数据
- C# Newtonsoft.Json 解析多嵌套json 进行反序列化
- JavaScript使用json2.js对json数据进行解析
- c#操作json使用newtonsoft.json
- C# 低版本Newtonsoft解析JSON数组
- C# 利用Newtonsoft.Json进行Json序列化与反序列化
- 基于Newtonsoft.Json进行JSON文档的解析
- 深入理解JavaScript系列(26):设计模式之构造函数模式
- Autolayout下的UIScrollView的适配
- 深入理解JavaScript系列(27):设计模式之建造者模式
- iOS--图片加载速度极限优化(FastImageCache框架解析)
- acm 算法模板 适合初学者使用【转】
- c# 使用Newtonsoft.Json 对数据进行打包与解析
- Emerge常用命令
- windows管道
- 深入理解JavaScript系列(28):设计模式之工厂模式
- JAVA -jar命令如何指定classpath
- C++ Compiling… Error spawning cl.exe
- css position: absolute、relative详解
- 深入理解JavaScript系列(29):设计模式之装饰者模式
- myisamchk命令使用总结