Вы упомянули двоичный код, и действительно BinaryFormatter
здесь very brittle. Проблема заключается в том, что BinaryFormatter
является типом и полем. Вместо этого, вы хотите контракт на основе сериалайзера, такие как XmlSerialzier
, DataContractSerializer
(3.0) и т.д.
Или двоичный, protobuf-net является C# реализации «буфера протокола» формат проволока Google, но повторно реализованы по .NET линии; (заметьте: я автор ...).
Это (как и другие) основанный на данных контракт, но вместо <CustomerName>asdasd</CustomerName>
и т. Д. Он использует числовые теги для определения вещей; так:
[ProtoContract]
public class Customer {
[ProtoMember(1)]
public string Name {get;set;}
// ...
}
Поскольку вы добавляете больше членов, вы даете им новые уникальные номера; это позволяет расширять его, не полагаясь на какие-либо имена и т. д. Плюс это очень быстро; -p Как и в случае с XmlSerializer
, он будет игнорировать то, чего он не ожидает (или может хранить их для безопасного округления неожиданных данных), и поддерживает те же самые вещи по умолчанию. Вы даже можете использовать существующий XML атрибуты:
[XmlType]
public class Customer {
[XmlElement(Order=1)]
public string Name {get;set;}
// ...
}
я мог бы говорить об этом предмете в течение всего дня, так что я лучше заткнись, прежде чем [слишком поздно].
Да, это именно та причина, по которой существует ISerializable, поэтому вы можете иметь дело с предыдущими форматами. –