• C# 对象的序列化与反序列化 (DataContractJsonSerializer)


    项目引用 

    System.Runtime.Serialization.dll

    添加命名空间

    using System.Runtime.Serialization.Json;

    1.序列化对象,得到Json字符串

            public static string WriteFromObject<T>(T obj) where T : class
            {
                DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(T));
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                {
                    dcjs.WriteObject(ms, obj);

              //ms.Position = 0;
              //byte[] bt = new byte[ms.Length];
              //ms.Read(bt, 0, bt.Length);
              //return Encoding.Default.GetString(bt);

    return Encoding.Default.GetString(ms.ToArray());
                }
            }

    2.反序列化对象 ,从Json字符串中得到对象

            public static T ReadToObject<T>(string json) where T : class
            {
                DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(T));
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Encoding.Default.GetBytes(json)))
                {
                    return dcjs.ReadObject(ms) as T;
                }
            }

    3.对象示例

    /// 实现可序列化数据协定
        [System.Runtime.Serialization.DataContract]
        /// 识别方法返回类型
        [System.Runtime.Serialization.KnownType("KnownType")]
        public class ClassSample
        {
            /// 可被序列化成员
            [System.Runtime.Serialization.DataMember]
            public int DataMember { get; set; }
            /// 枚举成员也要序列化
            [System.Runtime.Serialization.EnumMember]
            public Example EnumMember;
            /// 非数据协定成员忽略序列化
            [System.Runtime.Serialization.IgnoreDataMember]
            public int IgnoreDataMember { get; set; }
            /// 序列化时可缺少的字段
            [System.Runtime.Serialization.OptionalField]
            public int OptionalField;
    
            //反序列化后立即调用
            [System.Runtime.Serialization.OnDeserialized]
            //反序列化时调用
            [System.Runtime.Serialization.OnDeserializing]
            //在序列化该对象图后是否调用该方法
            [System.Runtime.Serialization.OnSerialized]
            //在对象序列化前调用此方法
            [System.Runtime.Serialization.OnSerializing]
            public KnownType KnownType()
            {
                return null;
            }
        }
        [System.Runtime.Serialization.DataContract]
        public enum Example
        { }
        [System.Runtime.Serialization.DataContract]
        public class KnownType
        { }
  • 相关阅读:
    站立会议第八天
    Servlet基础知识
    JSP基础知识
    JSP基础知识
    JDBC工具包
    JDBC
    MySQL
    ASP.NET程序代码优化的七个方面
    中小型软件项目开发一般流程建议
    理解九种图
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/4708659.html
Copyright © 2020-2023  润新知