zoukankan      html  css  js  c++  java
  • 最快的序列化组件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

  • 相关阅读:
    docker安装minio
    详解nohup /dev/null 2>&1 含义的使用
    CentOS7系统更换yum Repo源
    centos7运行yum报如下提示:Run "yum repolist all" to see the repos you have
    linux安全篇:禁止频繁访问的ip访问nginx
    Nginx 添加防爬虫
    Nginx 加载conf.d (内文件***.conf)
    rabbitMq消费死循环
    RabbitMq安装(单点与集群)rabbitMq以及状态查询
    rabbitMq内存与磁盘分配问题
  • 原文地址:https://www.cnblogs.com/wuxl360/p/5552008.html
Copyright © 2011-2022 走看看