Отметьте поля, которые вы не хотите сериализовать, с помощью [NonSerialized]. Таким образом, вы можете пропустить сторонние поля.
[Serializable]
class Foo
{
Guid value1;
decimal value2;
SomeCustomEnum value3;
[NonSerialized]
int Skip = 12;
}
[Изменить]
Новый пример после комментария о наследовании. Вы можете контролировать свою сериализацию вручную:
class Foo
{
public Guid value1;
public decimal value2;
public SomeCustomEnum value3;
}
[Serializable]
class Bar : Foo, ISerializable
{
private int a;
public Bar()
{
}
#region Implementation of ISerializable
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("a", a);
info.AddValue("value1", value1);
info.AddValue("value2", value2);
}
protected Bar(SerializationInfo info,StreamingContext context)
{
a = info.GetInt32("a");
value1 = (Guid)info.GetValue("value1", typeof(Guid));
value2 = info.GetDecimal("value2");
}
#endregion
}