C#使用protobuf

C#使用protobuf


•在https://github.com/jskeet/protobuf-csharp-port上下载压缩包 解压(google官方地址http://code.google.com/p/protobuf-csharp-port)

•运行buildall 会生成一个build_output文件夹
•创建一个proto文件
•将刚才你的proto文件放在   \build_output\tools
•还是打开命令行,定位于对应的目录里面,你放proto文件的目录里面。
•输入:protoc --descriptor_set_out=msg.protobin --include_imports msg.proto         
•msg.protobin是要生成的prtobobin文件,可以使用这个bin文件生成cs文件
•再输入protogen msg.protobin  使用该bin文件生成cs文件,这样你就可以得到该 msg.cs 的CSharp版文件了,同时在VS里面使用要引入Google.ProtocolBuffers.dll。为了


方便你可以将其做成一个批处理文件代码如下:

echo on
 protoc --descriptor_set_out=msg.protobin --include_imports msg.proto 


protogen msg.protobin   


将其另存为.bat文件即可 运行即可生成相应***.proto文件对应的***..cs文件


将生成的 ***.cs文件导入到工程中给项目添加Google.ProtocolBuffers.dll引用


 该文件在build_output文件夹中


项目->添加->引用->浏览->浏览->选择dll文件即可

例如编译一个msg.proto文件

package msginfo;

 message CMsg
 {
     required string msghead = 1;
     required string msgbody = 2;
 }


生成Msg.cs文件后导入工程


关键代码:

using msginfo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProtoExport
{
    class Program
    {
        static void Main(string[] args)
        {

            //序列化
            CMsg.Builder builder = new CMsg.Builder();
            builder.SetMsghead("msghead");
            builder.SetMsgbody("msgbody");
            CMsg myMessage = builder.Build();
            Console.WriteLine("------message body = " + myMessage.Msgbody);
            Console.WriteLine("------message head = " + myMessage.Msghead);



            //反序列化
            byte[] buf = myMessage.ToByteArray();
            CMsg myMessage2 = CMsg.ParseFrom(buf);
            Console.WriteLine("------message body = " + myMessage2.Msgbody);
            Console.WriteLine("------message head = " + myMessage2.Msghead);
            
        }
    }
}






你可能感兴趣的:(C#使用protobuf)