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

本文介绍了JSON的基础概念及其在.NET中的应用,包括序列化与反序列化的实现方式,并对比了几种常用的JSON解析方法,如DataContractJsonSerializer、JavaScriptSerializer等。
摘要由CSDN通过智能技术生成

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

 

一、基本概念

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;
        }
    }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值