两种方式解析json---C# WinForm

前言

最近项目中涉及到解析json,他可以用两种方式实现,自带的和第三方的,感兴趣的都了解一下吧。

 

两种方式介绍

自己的方式(Serialization.Json)

C#自带的方式操作json是以序列化和反序列的方式。

这种方式解析json比较麻烦,自己要写一个数字协议DataContract,进行序列化处理。注意json里的key值 要和定义的数字协议(DataContract)的数字成员(DataMember)的名称相对应,因为他是根据名称对应的,不然解析到的数据是null。

首先我们要引用System.Runtime.Serialization,这个可以在【引用管理器】的【程序集】里面找到。

所在的命名空间为:

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

我的要解析的数据为:

{
	"TERMINAL": [{
		"TERMINAL_IP": "192.168.21.5",
		"TERMINAL_CMDPORT": "8080",
		"TERMINAL_DATAPORT": "",
		"TERMINAL_CONNECT_STATE": "",
		"TERMINAL_ID": "017993",
		"TERMINAL_USB_SUM": "40",
		"TERMINAL_SOFT_VERSION": "2.001007",
		"TERMINAL_MODEL": "C40",
		"TERMINAL_ALL_USBPORTS_STATE": ""
	}]
}

我自己写的数字协议:

    [DataContract]
    class TERMINALINFO
    {
        [DataMember(Order =0)]
        public string TERMINAL_IP { get; set; }
        [DataMember(Order = 1)]
        public string TERMINAL_CMDPORT { get; set; }
        [DataMember(Order = 2)]
        public string TERMINAL_DATAPORT { get; set; }
        [DataMember(Order = 3)]
        public string TERMINAL_CONNECT_STATE { get; set; }
        [DataMember(Order = 4)]
        public string TERMINAL_ID { get; set; }
        [DataMember(Order = 5)]
        public string TERMINAL_USB_SUM { get; set; }
        [DataMember(Order = 6)]
        public string TERMINAL_SOFT_VERSION { get; set; }
        [DataMember(Order = 7)]
        public string TERMINAL_MODEL { get; set; }
        [DataMember(Order = 8)]
        public string TERMINAL_ALL_USBPORTS_STATE { get; set; }
    }
    [DataContract]
    class USBShare
    {
        [DataMember(Order = 0)]
        public TERMINALINFO[] TERMINAL { get; set; }
    }

 

解析获取数据的方法(如下),updateInfo就是获取到的数据(下图所示)。

        public static void parseJson(string result)
        {
            var mStream = new System.IO.MemoryStream(Encoding.Default.GetBytes(result));
            var serializer = new DataContractJsonSerializer((typeof(USBShare)));
            USBShare updateInfo = (USBShare)serializer.ReadObject(mStream);
        }

 

 

第三方库解析(Newtonsoft.Json)

Newtonsoft.Json是开源的C#处理json的第三方库,在GitHub(https://github.com/JamesNK/Newtonsoft.Json)可以找到源码和你所需要的动态库。

有两种方式引用它的动态库,第一种就是根据你的框架选择合适的动态库(我的是Json120r2版本,有如下这么多个可用的框架),将对应的动态库放到你项目下,进行引用。

第二种,就是 选中当前项目右键 选中【管理NuGet程序包】,如下,然后过滤搜索【Newtonsoft.Json】,然后将其【安装】。

安装结束后,我们可以看到【引用】里面已经有它了,然后就可直接使用其命名空间,编译后,就可以在生成文件夹里面看到Newtonsoft.Json.dll了,这种方式是自动根据框架选择对应的动态库,很方便。

代码如下(我只解析了我需要的部分),

        public void parseJsonOfTerminal(string jsonText)
        {
           JObject jObj = JObject.Parse(jsonText);
            JArray jArray = JArray.Parse(jObj["TERMINAL"].ToString());

            for (int i = 0; i < jArray.Count(); i++)
            {
                JObject tempo = JObject.Parse(jArray[i].ToString());
                info.ip = tempo["TERMINAL_IP"].ToString();
                info.port = tempo["TERMINAL_CMDPORT"].ToString();
                info.id = tempo["TERMINAL_ID"].ToString();
            }
        }

 记得写命名空间

using Newtonsoft.Json.Linq;

结束语

这就是C#解析json的两种方式,自带的那种写法我第一遇到(我之前是写Qt C++的,比较孤陋寡闻),比较有意思,虽然比较麻烦。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm 是一种在微软 .NET 框架下开发的图形用户界面应用程序的技术。解析 JSON(JavaScript Object Notation)是一种用于数据交换的轻量级数据格式。在 WinForm 应用程序中解析 JSON,可以通过以下步骤完成: 首先,需要在 WinForm 项目中添加对 Newtonsoft.Json 的引用。Newtonsoft.Json 是一个常用的 JSON 库,它提供了丰富的 API 用于解析和生成 JSON 数据。 接下来,可以通过使用 Newtonsoft.Json 中的 JObject 或 JArray 类,从 JSON 字符串中提取所需的数据。JObject 用于处理格式为对象(object)的 JSON 数据,而 JArray 用于处理格式为数组(array)的 JSON 数据。 然后,可以使用 JObject.Parse() 或 JArray.Parse() 方法将 JSON 字符串转换为对应的 JObject 或 JArray 对象。然后,就可以使用这些对象的属性和方法访问 JSON 数据的各个部分。 例如,假设有以下 JSON 字符串: { "name": "Tom", "age": 25, "hobbies": ["reading", "painting", "playing guitar"] } 可以使用以下代码将其解析为 JObject 对象,并获取其中的数据: string jsonString = "{\"name\":\"Tom\",\"age\":25,\"hobbies\":[\"reading\",\"painting\",\"playing guitar\"]}"; JObject jsonObject = JObject.Parse(jsonString); string name = (string)jsonObject["name"]; int age = (int)jsonObject["age"]; JArray hobbiesArray = (JArray)jsonObject["hobbies"]; 最后,可以对获取到的数据进行进一步的处理和显示,例如将它们赋值给 WinForm 界面的控件,或者进行其他的业务逻辑操作。 总结起来,WinForm 可以使用 Newtonsoft.Json 提供的 JObject 和 JArray 类来解析 JSON 数据。这些类提供了方便的方法来访问和操作 JSON 数据的各个部分,从而实现对 JSON 数据解析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值