BinaryFormatter
управляет этим путем включения в вывод имени поля, которое является как многословным, так и хрупким (например, оно не выдержит изменения чего-либо из свойства field + в автоматически реализуемое свойство).
Если вы хотите сделать что-то подобное в protobuf-net, вы можете использовать «ImplicitFields», однако учтите, что это присваивает целочисленный ключ каждому члену в алфавитном порядке , поэтому подходит только в том случае, если ваша модель полностью исправлен как контракт и не будет добавлять / переименовывать участников , поскольку это нарушит контракт (что означает: вы не можете правильно десериализовать существующие данные). Например:
[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class Foo {...} // all public fields and properties are serialized,
// similar to XmlSerializer
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class Bar {...} // all fields (not properties; public or private)
// are serialized, similar to BinaryFormatter
Если ваш контракт не является полностью фиксированным, предпочтительнее было бы явно назначить ключ каждому сериализованному участнику, что можно сделать в очень многими способами . Самое простое существо:
[ProtoContract]
public class Foo {
[ProtoMember(1)]
public int A {get;set;}
...
}