【发布时间】:2015-01-05 21:51:38
【问题描述】:
我们一直在使用Serializer.GetProto<T>() 为十几条消息生成原型定义。我们希望将所有定义合并到一个 .proto 文件中,以便更轻松地查看我们发送的消息。但是我找不到合并输出的方法。最大的问题是当一个 POCO 用于多条消息时(如下例中的Person)。有没有办法将多个 .proto 定义合并为一个定义?
或者Serializer.GetProto<T>() 是用于这项工作的错误工具,而其他东西已经在这样做了?
使用 protobuf-net v2.0.0.668。
最小示例(总结:类
Department 和Order 都包含类Person,为Department 和Order 生成原型定义):
class Program
{
public static void Main(string[] args)
{
string departmentProto = Serializer.GetProto<Department>();
string orderProto = Serializer.GetProto<Order>();
Console.WriteLine(departmentProto);
Console.WriteLine(orderProto);
Console.ReadKey();
}
}
[DataContract]
public class Person
{
[DataMember(Order = 1)]
public string FirstName { get; set; }
[DataMember(Order = 2)]
public string LastName { get; set; }
}
[DataContract]
public class Department
{
[DataMember(Order = 1)]
public string Name { get; set; }
[DataMember(Order = 2)]
public Person[] Employees { get; set; }
}
[DataContract]
public class Order
{
[DataMember(Order = 1)]
public string ItemOrdered { get; set; }
[DataMember(Order = 2)]
public Person Customer { get; set; }
}
实际输出:
package ConsoleApplication1;
message Department {
optional string Name = 1;
repeated Person Employees = 2;
}
message Person {
optional string FirstName = 1;
repeated string LastName = 2;
}
package ConsoleApplication1;
message Order {
optional string ItemOrdered = 1;
repeated Person Customer = 2;
}
message Person { <-- Person is repeated
optional string FirstName = 1;
repeated string LastName = 2;
}
期望的输出:
package ConsoleApplication1;
message Department {
optional string Name = 1;
repeated Person Employees = 2;
}
message Order {
optional string ItemOrdered = 1;
repeated Person Customer = 2;
}
message Person { <-- Person only appears once
optional string FirstName = 1;
repeated string LastName = 2;
}
【问题讨论】:
标签: c# protocol-buffers protobuf-net