博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET中常用的几种解析JSON方法
阅读量:7145 次
发布时间:2019-06-29

本文共 3929 字,大约阅读时间需要 13 分钟。

 

一、基本概念

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 类型的实例 

 

更多参考:

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

 

.NET中常用的几种解析JSON方法比较 
名称 类库 使用场景 linq支持
System.Runtime.Serialization.Json DataContractJsonSerializer 全部 No
System.Web.Script.Serialization JavaScriptSerializer web No
System.Json JsonArray、JsonObject、JsonValue Silverlight Yes
Newtonsoft.Json JsonConvert、JArray、JObject、JValue 全部 Yes

 

 

 

 

 

 

 

1、DataContractJsonSerializer

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

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

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

///     /// 异常对象    ///     [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帮助类

///     /// json 帮助类    ///     internal class JsonHelper    {        //JSON字符串转对象        public static T JsonToT
(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 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
(jsonstr); var jsonstr=JsonHelper.TtoJson
(T);

更多内容请参考:

 

2、JavaScriptSerializer

using System.Web.Script.Serialization;

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

更多请参考:

 

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"}}}

更多请参考:

 

4、JSON.NET

json帮助类

public class JsonHelper    {        ///            /// 对象转换为JSON字符串        ///         ///         /// 
public static string ObjectToJson(object item) { string res = JsonConvert.SerializeObject(item); return res; } /// /// JSON转换为对象 /// ///
/// ///
public static T JsonToObject
(string jsonString) { T res = JsonConvert.DeserializeObject
(jsonString); return res; } }

转载地址:http://whgrl.baihongyu.com/

你可能感兴趣的文章
ELK 实验(五)配置数据源和仪表盘
查看>>
centos 6.3搭建个人私有云存储owncloud
查看>>
PHP中的浅拷贝和深拷贝
查看>>
利用redis-sentinel+keepalived实现redis高可用
查看>>
CloudStack4.2登录报用户名或密码错误问题解析
查看>>
逻辑备库之ORA-01403解决方法
查看>>
MySQL Replication(复制)基本原理
查看>>
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月5日-12月11日)
查看>>
十年老站吐血迁移实录
查看>>
配置Exchange2010的边缘传输服务器
查看>>
我的家庭私有云计划-7
查看>>
Word中使用正则表达式进行查找和替换
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
微软MVP社区巡讲
查看>>
Silverlight3游戏开发之空当接龙基础篇
查看>>
.NET深入解析LINQ框架(二:LINQ优雅的前奏)
查看>>
虚弱的原则
查看>>
我的友情链接
查看>>
为什么网络棋牌的分成那么高?
查看>>
答案永远在现场
查看>>