这必须帮助您开始使用它:Source & Credit & Marc Gravell
最简单的入门方法就是编写数据:
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;}
}
由于“protocol buffers”是一种二进制格式,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 ),否则代码非常相似。
更新:Download this package