欢迎来到忆约科技! 手机版
编程专栏
网络探索
科技频道
社会话题
美文鉴赏

使用.net 3.5的DataContractJsonSerializer进行JSON Serialization

编辑时间:2017年12月14日 22:54 作者:E小编

使用.net 3.5的DataContractJsonSerializer进行JSON Serialization
 可能你看到这个东东的时候还不理解它是什么,但是如果在.net之前的版本你用过JavaScriptSerializer方法的话,应该就明白了,它在.net 3.5中取代了JavaScriptSerialize进行JSON的serialization和deserialization功能。
注意:需要引入命名空间
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;(这个.NET Framework 3.5需要添加引用:System.Web.Extensions.dll)
备注:关于另一个json操作类JavaScriptSerializer需要引入命名空间
using System.Web.Script.Serialization;(这个需要添加引用:System.Web.Extensions.dll )



        // 右键添加引用 System.Runtime.Serialization;
        //using System.IO;
        //using System.Text;
        //using System.Runtime.Serialization;
        //using System.Runtime.Serialization.Json;

        // Serialize   
        string json = JsonHelper.Serialize<ReturnObject>(returnObject);
        // or string json = JsonHelper.Serialize(returnObject);
        // Deserialize   
        obj = JsonHelper.Deserialize<ReturnObject>(json); 

        /// <summary>
        /// 返回对象
        /// </summary>
        [DataContract]
        public class ReturnObject
        {
            /// <summary>
            /// 返回消息
            /// </summary>
            [DataMember(Name = "message", Order = 1)]
            public string Message { get; set; }

            /// <summary>
            /// 操作状态
            /// </summary>
            [DataMember(Name = "status", Order = 0)]
            public string Status { get; set; }
        }

        /// <summary>
        /// Json帮助类
        /// </summary>
        public class JsonHelper
        {
            /// <summary>
            /// 序列化输出json字符串
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static string Serialize<T>(T obj)
            {
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.WriteObject(ms, obj);
                    string retVal = Encoding.UTF8.GetString(ms.ToArray());
                    return retVal;
                }
            }

            /// <summary>
            /// 反序列化成对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="json"></param>
            /// <returns></returns>
            public static T Deserialize<T>(string json)
            {
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
                {
                    T obj = Activator.CreateInstance<T>();
                    System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
                    obj = (T)serializer.ReadObject(ms);
                    return obj;
                }

            }
        }
二维码