.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.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,比如:

    /// <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;
        }
    }

 更多請參考:http://www.newtonsoft.com/json/help/html/Introduction.htm

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com