首先需要下载:protobuf-net.dll 文件 :
下载链接。没有积分的同学,扫描主页左侧二维码或 V信搜 " 开发同学留步",回复“ ProtoGen”或者“PG” 获取资源。
新建项目:然后添加引用,导入刚刚下载的文件,步骤如下图:
最后编写如下代码:
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;
}
}
}
注意两个类在一个命名空间下:
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);
}
}
}
运行结果图: