首頁  >  文章  >  後端開發  >  .NET中使用Protobuffer 來實現序列化與反序列化的詳解

.NET中使用Protobuffer 來實現序列化與反序列化的詳解

黄舟
黄舟原創
2017-03-03 13:26:192602瀏覽

.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)!


 

##
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn