• Protobuf-net 应用


    什么是ProtoBuf-net

    Protobuf是google开源的一个项目,是基于二进制的类似于XML,JSON这样的数据表示语言,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法。它比xml格式要少的多,甚至比二进制数据格式也小的多。通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。

    protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。Protobuf格式协议和xml一样具有平台独立性,可以在不同平台间通信,通信所需资源很少,并可以扩展,可以旧的协议上添加新数据。

    ProtoBuf-net应用

    谷歌官方没有提供.net的实现,所以在nuget上找了一个移植的(Protobuf是在java和c++运行的,Protobuf-net当然就是Protobuf在.net环境下的移植。)

    Nuget里搜索Protobuf-net,下载,自动添加到项目中 

    1.普通应用

    using ProtoBuf;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Web;
    
    namespace WebApplication1
    {
        public class ProtobufHelper
        {
            /// <summary>
            /// 序列化
            /// </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="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;
                }
            }
        }
    
    }
    View Code
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Runtime.Serialization;
     5 using System.ServiceModel;
     6 using System.ServiceModel.Activation;
     7 using System.Text;
     8 using ProtoBuf;
     9 
    10 namespace WebApplication1
    11 {
    12     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。
    13     // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。
    14     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    15     public class Service1 : IService1
    16     {
    17 
    18         public string DoWork()
    19         {
    20             UserInfo u1 = new UserInfo();
    21             u1.Name = "张三";
    22             u1.Age = 48;
    23             u1.Address = "北京";
    24             UserInfo u2 = new UserInfo();
    25             u2.Name = "李四";
    26             u2.Age = 21;
    27             u2.Address = "天津";
    28             List<UserInfo> us = new List<UserInfo>() { u1, u2 };
    29             string serStr = ProtobufHelper.Serialize(us);
    30            // List<UserInfo> s = ProtobufHelper.DeSerialize<List<UserInfo>>(serStr);
    31             return serStr;
    32         }
    33     }
    34 
    35     [ServiceContract]
    36     public interface IService1
    37     {
    38         [OperationContract]
    39         [System.EnterpriseServices.Description("测试")]
    40         string DoWork();
    41     }
    42 
    43     [ProtoContract]
    44     public class UserInfo
    45     {
    46         [ProtoMember(1)]
    47         public string Name { get; set; }
    48 
    49         [ProtoMember(2)]
    50         public int Age { get; set; }
    51 
    52         [ProtoMember(3)]
    53         public string Address { get; set; }
    54     }
    55 }
    View Code

     2.WCF应用

  • 相关阅读:
    PAT乙级1002. 写出这个数 (20)
    PAT乙级1001. 害死人不偿命的(3n+1)猜想 (15)
    HDU 4520 小Q系列故事——最佳裁判
    POJ 3414 Pots(BFS)
    POJ 1118 Lining Up
    POJ 2484 A Funny Game
    POJ 2231 Moo Volume
    HDU 5718 Oracle(高精度)
    FZU 1502 Letter Deletion(DP)
    HDU 1564 Play a game
  • 原文地址:https://www.cnblogs.com/yf2011/p/5177107.html
Copyright © 2020-2023  润新知