1
Есть ли способ обеспечить обратную совместимость при изменении типа члена? Например, класс Person состоит в 1-й версии одного целого числа, но в версии 2 строки. Я знаю, что это нарушает контракт, но пример - это проблема, которая редко возникает в разработке программного обеспечения реальной жизни.protobuf-net: обратная совместимость при изменении типа?
Заранее спасибо.
// Version 1
[ProtoContract]
class Person
{
[ProtoMember(1)]
public int ID { get; set; }
}
// Version 2
[ProtoContract]
class Person
{
[ProtoMember(1)]
public string ID { get; set; }
}
Спасибо, но два вопроса: 1. это не является договором перерыв, когда мы изменяем тип из «межд» на «Int? ' ? Означает ли это, что – Guenter
<Извините, забудьте первый комментарий, вот и весь> Спасибо большое, но два вопроса: 1. Разве это не разрыв контракта, когда мы меняем тип от 'int' до 'int?' ? 2. Нет сериализации null? Я беспокоюсь о том, что в моем двоичном файле может быть много старого «мусора». У меня также есть озабоченность по поводу десериализации: даже если ID_v1 имеет значение null, он может потерять память или я ошибаюсь? – Guenter
@Guenter 1) нет, protobuf-net не будет рассматривать 'int' <===>' int? 'Как разрыв контракта, потому что на уровне protobuf (спецификация проводов) это просто необязательный' int'; 2) на уровне протобуфа нет понятия «null» - опять же, это просто будет рассматриваться как необязательное значение, где «null» говорит «не пишите это», поэтому он будет * читать *, если он находится в потоке, но он никогда не будет * записан *. Таким образом, он никогда не заберет память в потоке, и потому что нет * поля *, он не займет никакой памяти в объекте –