代码之家  ›  专栏  ›  技术社区  ›  Marc Bollinger

protobuf net中list<t>的.proto等价物是什么?

  •  3
  • Marc Bollinger  · 技术社区  · 14 年前

    为了保持一致性,我们对许多对象模型使用代码生成,其中一个分支通过单独的生成模块为protocolbuffers生成.proto文件。然而,在这一点上,我仍然无法理解如何实现当它发生在 List<T> 对象。

    这似乎可以通过合同实现:

    [ProtoMember(1)]
    public List<SomeType> MyList {get; set;} 
    

    但除此之外,我不知道如何或是否可以只通过创建.proto文件/使用vs自定义工具来实现这一点。有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Marc Gravell    14 年前
    repeated SomeType MyList = 1;
    

    而且-它不是100%完美,但是你可以尝试 GetProto() :

    class Program
    {
        static void Main()
        {
            Console.WriteLine(Serializer.GetProto<Foo>());
        }
    }
    [ProtoContract]
    public class Foo
    {
        [ProtoMember(1)]
        public List<Bar> Items { get; set; }
    }
    [ProtoContract]
    public class Bar { }
    

    给予:

    message Foo {
       repeated Bar Items = 1;
    }
    
    message Bar {
    }
    

    最后,如果您需要不同的输出,那么XSLT是用户可编辑的。