0

У меня есть базовый класс, а другой - производный от него. Предположим, что базовый класс имеет 20 членов, а у производного 5 членов. Только производный класс сериализуем.Сериализация/десериализация производного класса

После создания экземпляра объекта производного класса есть все 25 членов. Теперь, как я могу только сериализовать 5 членов производного класса? Когда я использую «это» для сериализации или десериализации, весь класс (все 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)); 

Я не мог найти подобный пример. Если вы знаете, пожалуйста, укажите мне.

Спасибо за помощь.

ответ

0

Вместо того, чтобы наследовать, я сделал класс (который может быть сериализованным) членом родительского класса. Родительский класс больше не является родителем. Я просто создам объекты этого класса, и у него будет объект-член, который может быть сериализован.

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

Смежные вопросы