0

基本クラスとそこから派生した別のクラスがあります。基本クラスには 20 個のメンバーがあり、派生クラスには 5 個のメンバーがあるとします。派生クラスのみがシリアライズ可能です。

インスタンス化すると、派生クラスのオブジェクトには 25 個のメンバーがすべて含まれます。派生クラスの5つのメンバーのみをシリアル化するにはどうすればよいですか? 「this」を使用してシリアル化または逆シリアル化すると、クラス全体 (25 メンバーすべて) がシリアル化されてから逆シリアル化されます。

コード スニペットを次に示します (完全ではありません)。

// 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));

同様の例は見つかりませんでした。ご存知の方がいらっしゃいましたら、ご指摘ください。

すべての助けをありがとう。

4

2 に答える 2

4

シリアライズしたくないすべてのフィールドで [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

于 2012-05-17T14:43:16.697 に答える
0

継承する代わりに、(シリアル化できる) クラスを親クラスのメンバーにしました。親クラスはもはや親ではありません。このクラスのオブジェクトをインスタンス化するだけで、シリアル化できるメンバー オブジェクトが含まれます。

于 2012-06-07T18:01:21.450 に答える