zoukankan      html  css  js  c++  java
  • 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
        { }
  • 相关阅读:
    对象在hibernate中的状态
    Hibernate核心对象
    Hibernate入门步骤及概念
    Hibernate事务、缓存和连接池
    ORACLE数据库入门再在屋里坐会
    CREATE FUNCTION 的用法
    远程操作win的命令窗口
    获取谷歌浏览器cookie的两种方法
    使用selenium.webdriver.common.desired_capabilities获取浏览器日志
    Appium自动测试框架常用API
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/4708659.html
Copyright © 2011-2022 走看看