Serialización y versionado

Necesito serializar algunos datos para encadenar. La cadena se almacena en DB en una columna especial SerializeData.

He creado clases especiales que se utilizan para la serialización.

[Serializable]
public class SerializableContingentOrder
{
    public Guid SomeGuidData { get; set; }
    public decimal SomeDecimalData { get; set; }
    public MyEnumerationType1 EnumData1 { get; set; }
}

Publicación por entregas:

protected override string Serialize()
{
    SerializableContingentOrder sco = new SerializableContingentOrder(this);

    MemoryStream ms = new MemoryStream();
    SoapFormatter sf = new SoapFormatter();
    sf.Serialize(ms, sco);
    string data = Convert.ToBase64String(ms.ToArray());
    ms.Close();
    return data;
}

Deserialización:

protected override bool Deserialize(string data)
{
    MemoryStream ms = new MemoryStream(Convert.FromBase64String(data).ToArray());
    SoapFormatter sf = new SoapFormatter();

    SerializableContingentOrder sco = sf.Deserialize(ms) as SerializableContingentOrder;
    ms.Close();
    return true;
}

Ahora quiero tener soporte de versiones. ¿Qué pasa si cambio?SerializableContingentOrder clase. Quiero poder agregar nuevos campos en el futuro.

¿Tengo que cambiar a la serialización de DataContract? Por favor, dame un fragmento corto?