.NET中使用Protobuffer實現序列化和反序列化
1. 到官方下載protobuf-net.dll,官方地址:http://code.google.com/p/protobuf-net/
2. 建立控制台應用程式
3. 新增類別庫:protobuf-net.dll到應用程式。
範例程式碼:
準備一個要測試的實體類別(注意類別和方法都要加上protoBuffer序列化的特性):
[ProtoContract] public class Student { [ProtoMember(1)] public intStudentId { get; set; } [ProtoMember(2)] public stringName { get; set; } [ProtoMember(3)] public stringClassName { get; set; } }
然後對這個類別進行序列化和反序列化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using ProtoBuf; using ProtoBufferDemo.Entity; using System.IO; namespace ProtoBufferDemo { class Program { private const string TestPath = @"D:/1.txt"; static void Main(string[] args) { ////////////////////////序列化////////////////////////////// Student stu = new Student() { StudentId = 1, Name = "zhangsan", ClassName = "classOne" }; if (!File.Exists(TestPath)) { FileStream fs = File.Create(TestPath,1024, FileOptions.Asynchronous); fs.Dispose(); } Console.WriteLine("开始序列化并导出到文件..."); using (Stream s = new FileStream(TestPath,FileMode.Open ,FileAccess.ReadWrite)) { Serializer.Serialize<Student>(s, stu); s.Close(); } Console.WriteLine("序列化完毕"); //////////////////////反序列化//////////////////////////// Console.WriteLine("反序列化并输出..."); using (Stream s = new FileStream(TestPath,FileMode.Open)) { Student st = Serializer.Deserialize<Student>(s); Console.WriteLine("studentName:"+ stu.Name + "/r/n" + "studentId:"+ stu.StudentId + "/r/n" + "className:" + stu.ClassName); s.Close(); } Console.Read(); } } }
現在考慮多個實體的情況,測試一下序列化一個集合:
class Program { private const string TestPath = @"D:/1.txt"; static void Main(string[] args) { ////////////////////////序列化////////////////////////////// List<Student> stu = new List<Student>() { new Student(){ StudentId = 1, Name = "zhangsan", ClassName = "classOne"}, new Student(){StudentId = 2, Name = "lisi", ClassName = "classTwo"} }; if (!File.Exists(TestPath)) { FileStream fs = File.Create(TestPath,1024, FileOptions.Asynchronous); fs.Dispose(); } Console.WriteLine("开始序列化并导出文件..."); using (Stream s = new FileStream(TestPath,FileMode.Open, FileAccess.ReadWrite)) { Serializer.Serialize<List<Student>>(s,stu); s.Close(); } Console.WriteLine("序列化完毕"); //////////////////////反序列化//////////////////////////// Console.WriteLine("反序列化并输出..."); using (Stream s = new FileStream(TestPath,FileMode.Open)) { List<Student> sl = Serializer.Deserialize<List<Student>>(s); foreach (var student in sl) { Console.WriteLine("studentName:"+ student.Name + "/r/n" + "studentId:" + student.StudentId + "/r/n" + "class Name:" + student.ClassName); } s.Close(); } Console.Read(); } }
以上就是.NET中使用Protobuffer 實現序列化和反序列化的詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!
##