https://github.com/protocolbuffers/protobuf/releases
https://www.cnblogs.com/jbw752746541/p/10973200.html
E:\OGL3\perfect-client\protoc-3.19.1-win64\bin>protoc.exe -I=E:\OGL3\perfect-client\protoDemo --csharp_out=E:\OGL3\perfect-client\protoDemo E:\OGL3\perfect-client\protoDemo\Person.proto
1、序列化测试:
private static void WriteFile()
{
Console.WriteLine("Hello World!");
string protoFileName = "Person.bytes";
Person person = new Person();
person.Id = 1;
person.Name = "xiaoming你好";
person.Email = "xiaoming@163.com";
//person.Phones = new Google.Protobuf.Collections.RepeatedField<Person.Types.PhoneNumber>();
Person.Types.PhoneNumber phoneNumber = new Person.Types.PhoneNumber();
phoneNumber.Number = "123456";
phoneNumber.Type = Person.Types.PhoneType.Mobile;
person.Phones.Add(phoneNumber);
using (Stream output = File.OpenWrite(protoFileName))
{
person.WriteTo(output);
}
}
2、反序列化
private static void ReadFile()
{
string protoFileName = "Person.bytes";
using (Stream stream = File.OpenRead(protoFileName))
{
Person person = Person.Parser.ParseFrom(stream);
Console.WriteLine("Person ID: {0}", person.Id);
Console.WriteLine(" Name: {0}", person.Name);
Console.WriteLine(" Email: {0}", person.Email);
foreach (Person.Types.PhoneNumber phoneNumber in person.Phones)
{
switch (phoneNumber.Type)
{
case Person.Types.PhoneType.Mobile:
Console.Write(" Mobile phone #: ");
break;
case Person.Types.PhoneType.Home:
Console.Write(" Home phone #: ");
break;
case Person.Types.PhoneType.Work:
Console.Write(" Work phone #: ");
break;
}
Console.WriteLine(phoneNumber.Number);
}
}
}
这里的:
一定要保证名空间在:namespace Google.Protobuf.Examples.Preson下
否则找不大搜这个this扩展。