七丶google.protobuf的使用以及protobuff的map,list书写

之前用的protobuf, 但是记得之前的demo使用的是google.protobuf,所以就又弄了一下。

先去git上拉取,git的readme上说 直接build一下c#的sln。然而我查了一上午资料也不能生成.exe。

索性直接下载了win32.tar(这个在 git上有,每个版本的最下面)。他可以直接运行c#的.proto.

感觉剩下的操作,官网上说的很清楚了,就不记录了。

之后是书写上的内容:

这里主要记录了proto的list方法,以及map[key,value]方法,  这里以map[string ,list ]为例

proto:

syntax = "proto3";
 
  

message ComplexObject {   
    int32 id = 1;//   默认值,表示成员只有0个或者1个
    string name = 2;// 
    string email = 3;//
    repeated Result sons = 4; // repeated 列表
    Gender gender = 5; // Enum值 
    map map = 6; // 定义Map对象
	map mapList=7;//定义string 连着一串list
 
} 
message list{
	repeated Result ele=1;
}
enum Gender {
  MAN = 0;
  WOMAN = 1;
}

// 定义一个新的对象
message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}
 

之后是C#对应的使用例子

using UnityEngine;
using Google.Protobuf;
namespace MainClient {
    public class testProto : MonoBehaviour
    {

        void Start()
        {
            ComplexObject test = new ComplexObject();

            test.Id=200;//普通变量赋值

            //list变量赋值
            //先初始化类型
            Result res = new Result();
            res.Title = "a";
            //放入repeated
            test.Sons.Add(res);

            Result res2 = new Result();
            res2.Title = "b";
            test.Sons.Add(res2);
            foreach(var i in test.Sons)
            {
                Debug.Log(i.Title);
            }
            ///map [string , list] 使用方法
            ///这个list 在proto中必须是个message单独的,不能和map 同级,具体看proto
            ///先初始化list
            list testList = new list();
            Result newResult = new Result();
            newResult.Title = "c";
            testList.Ele.Add(newResult);

             
            Result newResult2 = new Result();
            newResult2.Title = "d";
            testList.Ele.Add(newResult2);

            list testList2 = new list();
            Result newResult3 = new Result();
            newResult3.Title = "e";
            testList2.Ele.Add(newResult2);

            Result newResult4 = new Result();
            newResult4.Title = "f";
            testList2.Ele.Add(newResult2);

            //放入map
            test.MapList["c"] = testList;
            test.MapList["d"] = testList2;

            //得到对应的map[key] 的value
            list ans = new list();
            Debug.Log(test.MapList.TryGetValue("c",out ans));
            foreach (var i in ans.Ele)
            {
                Debug.Log("map key = c:  value="+ i.Title);
            }


        }

    }
}

你可能感兴趣的:(C#,游戏网络连接)