如何在 DataContractSerializer 之后初始化私有字段

发布于 2024-12-26 15:42:33 字数 582 浏览 2 评论 0原文

我知道您可以使用 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();
}

I know you can serialize private fields with DataContractSerializer, but I just want to save a minimum amount of data that is easily human editable. After DataContractSerializer has done its thing is there a function that I can override or set in the DataContractSerializer class that just sets up the private fields after it has done the de-serialization?

[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();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一枫情书 2025-01-02 15:42:33

您可以在类中创建例如 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
    }
}

You could create e.g. OnDeserialized method in your class and apply OnDeserializedAttribute to it like:

[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
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文