【问题标题】:Serializing / Deserializing the derived class序列化/反序列化派生类
【发布时间】:2012-05-25 03:42:36
【问题描述】:

我有一个基类和另一个派生自它。假设,基类有 20 个成员,派生类有 5 个成员。只有派生类是可序列化的。

实例化后,派生类的对象拥有全部 25 个成员。现在我怎样才能只序列化派生类的 5 个成员?当我使用“this”进行序列化或反序列化时,整个类(所有 25 个成员)都会先序列化,然后再反序列化。

这是一个代码sn-p(不完整):

// Base class definition.
public abstract class baseMyClass
{
// declaration of members
}

...

// Derived class definition.
[Serializable]
public sealed class MyDerivedClass : baseMyClass
{
// declaration of members
}

...

// Serializing the object.
StringWriter writer = new StringWriter();
XmlSerializer xs = new XmlSerializer(typeof(MyDerivedClass));
xs.Serialize(writer, this);

...

// Deserializing the object.
StringReader reader = new StringReader(System.Text.Encoding.UTF8.GetString(data));
XmlSerializer xs = new XmlSerializer(typeof(MyDerivedClass));
MyDerivedClass objMyDerivedClass = (MyDerivedClass)(xs.Deserialize(reader));

我找不到任何类似的例子。有知道的请指点一下。

感谢大家的帮助。

【问题讨论】:

    标签: c# serialization xml-serialization deserialization xml-deserialization


    【解决方案1】:

    在您不想序列化的每个字段上使用 [NonSerializedAttribute] 属性。

    或者实现ISerializsable接口,在派生类上手动序列化你需要的字段。

    http://msdn.microsoft.com/en-US/library/axwwbcs6(v=vs.80)

    http://msdn.microsoft.com/en-us/library/ty01x675(v=vs.80).aspx

    【讨论】:

      【解决方案2】:

      我没有继承,而是让类(可以序列化)成为父类的成员。父类不再是父类。我将只实例化这个类的对象,它会有一个可以序列化的成员对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 2011-03-17
        • 2017-06-24
        相关资源
        最近更新 更多