分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

.NET中常用的几种解析JSON方法

发布时间:2023-09-06 01:37责任编辑:彭小芳关键词:.NET

一、基本概念

json是什么?

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

序列化和反序列化是怎么回事?

序列化: 将数据结构或对象转换成二进制串的过程

反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

如何:对 JSON 数据进行序列化和反序列化?

1、定义 Person 的数据协定

通过将 DataContractAttribute 附加到类并将 DataMemberAttribute 特性附加到要序列化的成员,为Person定义数据协定。

[DataContract] ???internal class Person ???{ ???????[DataMember] ???????internal string name; ???????[DataMember] ???????internal int age; ???}

2、将 Person 类型的实例序列化为 JSON

3、从 JSON 反序列化 Person 类型的实例 

更多参考:

https://msdn.microsoft.com/zh-cn/library/bb412179.aspx

https://msdn.microsoft.com/zh-cn/library/bb412170.aspx

二、.NET中常用的几种解析JSON方法

.NET中常用的几种解析JSON方法比较 
名称类库使用场景linq支持
System.Runtime.Serialization.JsonDataContractJsonSerializer全部No
System.Web.Script.SerializationJavaScriptSerializerwebNo
System.JsonJsonArray、JsonObject、JsonValueSilverlightYes
Newtonsoft.JsonJsonConvert、JArray、JObject、JValue全部Yes

1、DataContractJsonSerializer

.NET Framwork3.5自带的System.Runtime.Serialization.Json可很好的完成JSON的解析,不需要使用第三方库。

添加引用System.Runtime.Serialization,然后使用 using System.Runtime.Serialization.Json;

相应的序列化的类,注意下面类加的Attribute,比如:

 ???/// <summary> ???/// 异常对象 ???/// </summary> ???[DataContract] ???internal class Ex ???{ ???????[DataMember] ???????public string HelpLink { get; set; } ???????[DataMember] ???????public int HResult { get; set; } ???????[DataMember] ???????public string Message { get; set; } ???????[DataMember] ???????public string Source { get; set; } ???????[DataMember] ???????public string StackTrace { get; set; } ???}

json帮助类

/// <summary> ???/// json 帮助类 ???/// </summary> ???internal class JsonHelper ???{ ???????//JSON字符串转对象 ???????public static T JsonToT<T>(string json) ???????{ ???????????var ser = new DataContractJsonSerializer(typeof(T)); ???????????var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); ???????????stream.Position = 0; ???????????return (T)ser.ReadObject(stream); ???????} ???????//对象转化为JSON字符串 ???????public static string TtoJson<T>(T obj) ???????{ ???????????var ser = new DataContractJsonSerializer(typeof(T)); ???????????var stream = new MemoryStream(); ???????????ser.WriteObject(stream, obj); ???????????var db = new byte[stream.Length]; ???????????stream.Position = 0; ???????????stream.Read(db, 0, (int)stream.Length); ???????????var dataString = Encoding.UTF8.GetString(db); ???????????return dataString; ???????} ???}

使用:

 var t = JsonHelper.jsonToT<T>(jsonstr); var jsonstr=JsonHelper.TtoJson<T>(T);

更多内容请参考:https://msdn.microsoft.com/zh-cn/library/bb907644.aspx

2、JavaScriptSerializer

using System.Web.Script.Serialization;

var jsSerializer ??= new JavaScriptSerializer();var json= jsSerializer.Serialize(T);var T = jsSerializer.Deserialize<T>(json);

更多请参考:http://msdn.microsoft.com/zh-cn/library/bb359469.aspx

3、System.Json

// using System.Json ???????var css = "{ \"#header\" : {background:\"red\"}, layout : [5,4,1],color:\"cyan\" }"; ???????var style = JsonObject.Parse(css) as JsonObject; ???????????( ???from s in style ???where s.Key == "color" ???select (string)s.Value ???).First().ToString(); ???????// "cyan" ???????????// 更多操作 ???style["layout"][0] = 22; ???????var hd = style["#header"]; ???style["body>div+p"] = hd; ???style.Remove("#header"); ???????var bd = new JsonObject(); ???bd["border"] = "1px solid cyan"; ???style["body>div+p"]["#meta"] = bd; ???style.ToString(); ???????// {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}}

更多请参考:http://msdn.microsoft.com/zh-cn/library/cc626400%28v=VS.95%29.aspx

4、JSON.NET

json帮助类

public class JsonHelper ???{ ???????/// <summary> ??????????/// 对象转换为JSON字符串 ???????/// </summary> ???????/// <param name="item"></param> ???????/// <returns></returns> ???????public static string ObjectToJson(object item) ???????{ ???????????string res = JsonConvert.SerializeObject(item); ???????????return res; ???????} ???????/// <summary> ???????/// JSON转换为对象 ???????/// </summary> ???????/// <typeparam name="T"></typeparam> ???????/// <param name="jsonString"></param> ???????/// <returns></returns> ???????public static T JsonToObject<T>(string jsonString) ???????{ ???????????T res = JsonConvert.DeserializeObject<T>(jsonString); ???????????return res; ???????} ???}

.NET中常用的几种解析JSON方法

原文地址:https://www.cnblogs.com/zxtceq/p/8310025.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved