【问题标题】:How to initialize private fields after DataContractSerializer如何在 DataContractSerializer 之后初始化私有字段
【发布时间】:2012-01-12 17:57:24
【问题描述】:

我知道您可以使用 DataContractSerializer 序列化私有字段,但我只想保存最少量的易于人工编辑的数据。在 DataContractSerializer 完成它的事情之后,我可以在 DataContractSerializer 类中覆盖或设置一个函数,该函数在它完成反序列化后只设置私有字段?

[DataContract()]
[KnownType(typeof(stateCom))]
[KnownType(typeof(stateIp))]
abstract public  class  state
{
    [DataMember()]
    public string tag;
    [DataMember()]
    public byte Id;

    public HandleConnection master;


    // default data contstructor for xml serialization
    public state()
    {
    }

    public abstract void openPort();


    public abstract void closePort();
}

【问题讨论】:

    标签: c# xml-serialization datacontractserializer


    【解决方案1】:

    您可以创建例如OnDeserialized 在你的类中使用OnDeserializedAttribute 方法,如下所示:

    [DataContract()]
    [KnownType(typeof(stateCom))]
    [KnownType(typeof(stateIp))]
    abstract public  class  state
    {
        [DataMember()]
        public string tag;
        [DataMember()]
        public byte Id;
    
        public HandleConnection master;
    
    
        // default data contstructor for xml serialization
        public state()
        {
        }
    
        public abstract void openPort();
    
    
        public abstract void closePort();
    
        [OnDeserialized]
        internal void OnDeserialized(StreamingContext context)
        {
            // this is called after deserialization
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多