1、nuget安装Google.Protobuf,如下图所示:
2、找到安装后的文件路径,如下图所示
3、生成代码工具,如下图所示:
其中proto.bat是批量生成脚本,代码如下:
@echo off
for %%i in (*.proto) do (
protoc --csharp_out=./ %%i
rem 从这里往下都是注释,可忽略
echo From %%i To %%~ni.cs Successfully!
)
pause
4、使用,把生成的book.cs文件复制到项目使用,代码如下:
static void Main(string[] args)
{
book bk = new book()
{
Name = "第七天",
Price = "20.00"
};
Test3(bk);
Console.WriteLine("输入任意键退出程序.");
Console.ReadKey();
}
public static void Test3(book bk)
{
MemoryStream ms = new MemoryStream();
bk.WriteTo(ms);
Console.WriteLine($"ProtoBuf 序列化 book 对象结果:");
Console.WriteLine(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
ms.Position = 0;
book bk2 = book.Parser.ParseFrom(ms);
bk2.Price = "25.00";
Console.WriteLine($"ProtoBuf 反序列化成 book 对象结果:{JsonConvert.SerializeObject(bk2)}");
ms.Close();
}
使用方式二:
1、nuget安装protobuf-net,如下图所示:
2、新建类user.cs,代码如下图所示:
namespace ProtoBuf
{
[ProtoContract]
public class User
{
[ProtoMember(1)]
public string UserName { get; set; }
[ProtoMember(2)]
public string Sex { get; set; }
[ProtoMember(3)]
public int Age { get; set; }
[ProtoMember(4)]
public string Phone { get; set; }
}
}
3、使用,代码如下图所示:
static void Main(string[] args)
{
User user = new User()
{
UserName = "lijinming",
Age = 12,
Sex = "男",
Phone = "1234567890"
};
Test1();
Console.WriteLine("输入任意键退出程序.");
Console.ReadKey();
}
public static void Test1(User user)
{
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, user);
Console.WriteLine($"ProtoBuf 序列化 User 对象结果:");
Console.WriteLine(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
ms.Position = 0;
User user2 = Serializer.Deserialize(ms);
user2.Age = 13;
Console.WriteLine($"ProtoBuf 反序列化成 User 对象结果:{JsonConvert.SerializeObject(user2)}");
}
}
附件:demo完整代码下载


