Ответ 1
Это должно помочь вам начать с него: Источник и кредит и Марк Гравелл
Самый простой способ начать работу - просто написать свои данные:
class Person {
public int Id {get;set;}
public string Name {get;set;}
public Address Address {get;set;}
}
class Address {
public string Line1 {get;set;}
public string Line2 {get;set;}
}
Это хорошее начало, но само по себе недостаточно для protobuf-net. В отличие от XmlSerializer, имена участников не кодируются в данных - вместо этого вы должны выбрать целое число для идентификации каждого члена. Кроме того, чтобы показать намерение, необходимо показать, что мы предполагаем, что этот тип будет сериализован (т.е. Что это контракт данных):
[ProtoContract]
class Person {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Name {get;set;}
[ProtoMember(3)]
public Address Address {get;set;}
}
[ProtoContract]
class Address {
[ProtoMember(1)]
public string Line1 {get;set;}
[ProtoMember(2)]
public string Line2 {get;set;}
}
Поскольку "буферы протоколов" - это двоичный формат, protobuf-net сильно основан на классе Stream; это делает его простым в использовании с широким спектром реализаций. Например, для записи в файл:
var person = new Person {
Id = 12345, Name = "Fred",
Address = new Address {
Line1 = "Flat 1",
Line2 = "The Meadows"
}
};
using (var file = File.Create("person.bin")) {
Serializer.Serialize(file, person);
}
Это записывает 32-байтовый файл в "person.bin". Это может быть не очевидно в приведенном выше, но Serialize - это общий метод - строка также может быть:
using (var file = File.Create("person.bin")) {
Serializer.Serialize<Person>(file, person);
}
Но большую часть времени мы можем позволить компилятору использовать общий вывод типа для нашей работы. Дезаминирование данных
Нам также нужно вернуть данные!
Person newPerson;
using (var file = File.OpenRead("person.bin")) {
newPerson = Serializer.Deserialize<Person>(file);
}
Это считывает данные с "person.bin". Обратите внимание, что нам нужно указать тип этого времени (the), но в остальном код очень похож.
Обновление: Загрузить этот пакет