使用.net 3.5的DataContractJsonSerializer进行JSON Serialization

发布时间:2017-12-14 22:54 作者:独孤剑 阅读:349

使用.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;
                }

            }
        }

微信打赏, 微信扫一扫

支付宝打赏, 支付宝扫一扫

如果文章对您有帮助,欢迎给作者打赏

作者最新文章
拜登称政府正调查燃油公司黑客攻击事件 确定该公司网络被勒索软件感染
云南大理森林消防直升机坠入洱海:4名机组人员不幸遇难
jquery $.ajax()方法参数详解
java 使用 itext 导出 PDF 文本绝对定位, itext 绝对定位的方法
杭州野生动物世界“金钱豹出逃”发布致歉声明
企业信息查询系统