Если версия сборки изменяется, сериализованные объекты становятся недействительными.Однажды я внес изменения в исходный код Protobuf-Net , чтобы избежать проверки версии, и это было довольно легко сделать.Однако это может привести к неожиданным результатам (данные заканчиваются в неправильных полях), если вы не избегаете неявных полей и не устанавливаете индекс для каждого поля вручную, используя аннотации.Преимущество Protobuf-Net в том, что вы можете контролировать порядок полей в сериализованном потоке.
Другое решение заключается в использовании пользовательской сериализации ?Что-то вроде:
[Serializable]
public class MyObject : ISerializable
{
public int n1;
public int n2;
public String str;
public MyObject()
{
}
protected MyObject(SerializationInfo info, StreamingContext context)
{
n1 = info.GetInt32("i");
n2 = info.GetInt32("j");
str = info.GetString("k");
}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter =true)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("i", n1);
info.AddValue("j", n2);
info.AddValue("k", str);
}
}