外包做的网站,淄博seo开发,做网站空间500m多少钱,网站怎么做 吸引人前言
我们在开发上位机软件的过程中#xff0c;经常需要和Mes系统进行数据交互#xff0c;并且最常用的数据格式是Json#xff0c;本文就是详细介绍Json格式的类型#xff0c;以及我们在与mes系统进行交互时如何组织Json数据。
1、在C#中如何调用Json
在C#中调用Json相关…前言
我们在开发上位机软件的过程中经常需要和Mes系统进行数据交互并且最常用的数据格式是Json本文就是详细介绍Json格式的类型以及我们在与mes系统进行交互时如何组织Json数据。
1、在C#中如何调用Json
在C#中调用Json相关的对象的话需要引用Newtonsoft.Json的dll具体操作如下 使用vs的NuGet管理器下载dll 安装完成以后就能看到在引用中引用了Newtonsoft.Json 然后我们在代码中添加下面两个命名空间如下
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;添加完成以后就可以访问JObject、JArray了。
2、Json字符串常用格式
2.1 JObject
Json字符串最常用的是JObject格式格式如下 { “name”: “100”, “result”: false } 最外层是一个大括号然后内部是一些键值对字典类型对于c#中的字典类型大家很清楚一个是key一个是valueJObject的成员就是字典并且字典的key是字符串但是value的值不一定是字符串可以是bool类型也可以是int类型等。 举例如下
JObject jObject new JObject();jObject.Add(name,100);jObject.Add(result, false );string j1 jObject.ToString();Console.WriteLine(j1);在vs的输出窗口输出结果如图
{name: 100,result: false
}对于JObject赋值有多种方式既可以使用Add方法添加键值对也可以直接赋值如下
JObject jObject new JObject();jObject[name] 100;jObject[result] false;2.2 JArray
[{name: 100,result: false},{name2: 200,result2: false}
]JArray的最外层是一个中括号然后中间是很多个大括号这个大括号其实就是JObject所以对JArray的赋值就是为JArray添加JObject举例如下 JObject jObject1 new JObject();jObject1[name1] 100;jObject1[result1] false;JObject jObject2 new JObject();jObject2[name2] 200;jObject2[result2] true;JArray jArray new JArray();jArray.Add(jObject1);jArray.Add(jObject2);string j2 jArray.ToString();Console.WriteLine(j2);输出结果如下
[{name1: 100,result1: false},{name2: 200,result2: true}
]可以看到jArray 这个对象中被我添加了jObject1 、jObject2 两个对象。
3、如何在Mes通信中使用JSON字符串
3.1 将对象序列化为Json字符串 上图是一个mes厂家商提供的常用的一个员工登录需要上传的json字符串可以看到有一个为MessageCode的键、有一个为MessageContent的键并且MessageContent这个键的值不是一个单纯的值它的值又有两个成员一个是EmployeeId一个是Password Dictionarystring, object dic_postJObject new Dictionarystring, object();dic_postJObject.Add(MessageCode, 1);dic_postJObject.Add(MessageId, 2);Dictionarystring, string dic_messageContent new Dictionarystring, string();dic_messageContent.Add(EmployeeId,3);dic_messageContent.Add(Password, 111111);dic_postJObject.Add(MessageContent, dic_messageContent);string postJObject string.Empty;postJObject JsonConvert.SerializeObject(dic_postJObject, Formatting.Indented);Console.WriteLine(postJObject);最终输出结果如下
{MessageCode: 1,MessageId: 2,MessageContent: {EmployeeId: 3,Password: 111111}
}这里要注意的是 JsonConvert.SerializeObject这个方法中的第二个参数是一个Formatting类型的枚举这个枚举有两个值一个是 1Formatting.Indented 这个方法会将对象生成的Json字符串含有\r\n这样最后字符串很有层次性 2Formatting.None 这个方法会将对象生成的Json字符串去掉了回车空格换行最后的字符串全部连接在一起没有层次性。
3.2 将Json字符串反序列化为对象
我们从Mes系统接收到的数据一般是json字符串但是我们一般需要从这个Json字符串中提取出某个属性的值 下图是一个典型的mes系统返回的Json字符串的值我们一般需要自己先定义好这个类的结构这样才方便我们将Json字符串反序列化为对象。 这里我定义一个类如下 public class ResLogin{public bool isOk { get; set; }public string message { get; set; }}使用如下代码进行反序列化测试测试结果如下 Dictionarystring, object dic_postJObject new Dictionarystring, object();dic_postJObject.Add(isOk, true);dic_postJObject.Add(message, 2);string postJObject string.Empty;postJObject JsonConvert.SerializeObject(dic_postJObject, Formatting.Indented);Console.WriteLine(postJObject);ResLogin reqLogin JsonConvert.DeserializeObjectResLogin(postJObject);可以成功将json字符串转化为ResLogin 对象。
总结
对于简单的结构你可以使用JObject和JArray对于复杂的结构使用 Dictionarystring, object 自己去组合。 参考文章JSON详解