最快的序列化组件protobuf的.net版本protobuf.net

Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法。它比xml格式要少的多,甚至比二进制数据格式也小的多。
     Protobuf格式协议和xml一样具有平台独立性,可以在不同平台间通信,通信所需资源很少,并可以扩展,可以旧的协议上添加新数据
     Protobuf是在java和c++运行的,Protobuf-net当然就是Protobuf在.net环境下的移植。 通过一些网友测试发现,protobuf是目前最快的序列化组件,并且序列化之后内容的体积也是最小的,比ServiceStack.Text、 NewtonSoft.Json都快,秒杀.net自带的XML,Binary的序列化。

 

Get Start

[ProtoBuf.ProtoContract]    public class Person
    {
        [ProtoBuf.ProtoMember(1)]        public int Id { get; set; }
        [ProtoBuf.ProtoMember(2)]        public string Name { get; set; }
        [ProtoBuf.ProtoMember(3)]        public Address Address { get; set; }
    }
 
    [ProtoBuf.ProtoContract]    public class Address
    {
        [ProtoBuf.ProtoMember(1)]        public string Line1 { get; set; }
        [ProtoBuf.ProtoMember(2)]        public string Line2 { get; set; }
    }

 

 

最快的序列化组件protobuf的.net版本protobuf.net

      Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法。它比xml格式要少的多,甚至比二进制数据格式也小的多。
     Protobuf格式协议和xml一样具有平台独立性,可以在不同平台间通信,通信所需资源很少,并可以扩展,可以旧的协议上添加新数据
     Protobuf是在java和c++运行的,Protobuf-net当然就是Protobuf在.net环境下的移植。 通过一些网友测试发现,protobuf是目前最快的序列化组件,并且序列化之后内容的体积也是最小的,比ServiceStack.Text、 NewtonSoft.Json都快,秒杀.net自带的XML,Binary的序列化。

 

Get Start

[ProtoBuf.ProtoContract]    public class Person
    {
        [ProtoBuf.ProtoMember(1)]        public int Id { getset; }
        [ProtoBuf.ProtoMember(2)]        public string Name { getset; }
        [ProtoBuf.ProtoMember(3)]        public Address Address { getset; }
    }
 
    [ProtoBuf.ProtoContract]    public class Address
    {
        [ProtoBuf.ProtoMember(1)]        public string Line1 { getset; }
        [ProtoBuf.ProtoMember(2)]        public string Line2 { getset; }
    }

类 前加上ProtoContract Attrbuit,成员加上ProtoMember Attribute即可,其中ProtoMember需要一个大于0的int类型的值,原则上这个int类型没有大小限制,但建议从1开始,这是一个良好 的习惯,另外这个参数必需是这个类成员的唯一标识,不可重复

序列化

var person = new Person
            {
                Id = 1,
                Name = "First",
                Address = new Address { Line1 = "Line1", Line2 = "Line2" }
            };            using (var file = System.IO.File.Create("Person.bin"))
            {
                ProtoBuf.Serializer.Serialize(file, person);
            }

 

 

相关资料请参考开源地址:https://github.com/mgravell/protobuf-net

posted on 2016-06-02 10:02  邬兴亮  阅读(1729)  评论(0编辑  收藏  举报

导航