在VS中使用Protobuf

举报
陈言必行 发表于 2021/08/13 23:33:04 2021/08/13
【摘要】 首先需要下载:protobuf-net.dll 文件 : 下载链接。没有积分的同学,扫描主页左侧二维码或 V信搜 " 开发同学留步",回复“ ProtoGen”或者“PG” 获取资源。 新建项目:然后添加引用,导入刚刚下载的文件,步骤如下图: 最后编写如下代码: using System; using System.Collections...

首先需要下载:protobuf-net.dll 文件 :

下载链接。没有积分的同学,扫描主页左侧二维码或 V信搜 " 开发同学留步",回复“ ProtoGen”或者“PG” 获取资源。


新建项目:然后添加引用,导入刚刚下载的文件,步骤如下图:
1

2

3

最后编写如下代码:

using System;
using System.Collections.Generic;
using ProtoBuf;

namespace _011_实验
{ class Program { static void Main(string[] args) { Person person1 = new Person() { Name = "Czhenya", Age = 12, Hp = 32 }; Person person2 = new Person() { Name = "CZY", Age = 31, Hp = 46}; List<Person> PerList = new List<Person>() { person1, person2 }; string strRel = ProtobufHelp.Serialize<List<Person>>(PerList); Console.WriteLine(strRel); Console.WriteLine("序列化成功"); Console.WriteLine("反序列化结果"); List<Person> NewPerList = ProtobufHelp.DeSerialize<List<Person>>(strRel); for (int i = 0; i < NewPerList.Count; i++) { Console.WriteLine(NewPerList[i].ToString()); } Console.ReadKey(); } } [ProtoContract] class Person { [ProtoMember(1)] public string Name { get; set; } [ProtoMember(2)] public Int32 Age { get; set; } [ProtoMember(3)] public double Hp { get; set; } public override string ToString() { return Name+" "+Age +" "+Hp; } }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

注意两个类在一个命名空间下:

using ProtoBuf;   //引用命名空间
using System.IO;
using System.Text;

namespace _011_实验
{ class ProtobufHelp { /// <summary> /// 序列化成string /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns>返回字符串</returns> public static string Serialize<T>(T t) { using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize<T>(ms, t); return Encoding.UTF8.GetString(ms.ToArray()); } } /// <summary> /// 序列化到文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <param name="data"></param> public static void Serialize<T>(string path, T data) { using (Stream file = File.Create(path)) { Serializer.Serialize<T>(file, data); file.Close(); } } /// <summary> /// 根据字符串反序列化成对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="content"></param> /// <returns></returns> public static T DeSerialize<T>(string content) { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content))) { T t = Serializer.Deserialize<T>(ms); return t; } } /// <summary> /// 根据文件流返回对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="filestream"></param> /// <returns></returns> public static T DeSerialize<T>(Stream filestream) { return Serializer.Deserialize<T>(filestream); } }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

运行结果图:
4

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/78219863

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。