我有一个与DataContracts的程序集,我需要生成.proto模式才能够与java系统交换数据。 DataContracts代码可以更改,但不能在其中添加[ProtoContract]
和[ProtoMember]
属性,因为它会导致protobuf-net程序集依赖性。我们在系统的C#部分中使用WCF,所以我们不希望在大多数不支持Java系统的C#项目中依赖于proto-buf程序集。protobuf-net没有属性的序列化
在protobuf网网站在GettingStarted部分它说:
不喜欢的属性?
在v2中,可以通过RuntimeTypeModel在运行时配置属性的所有内容。
但我不知道如何实际配置没有属性的序列化,我没有看到任何这样的例子。
我试图做
[DataContract]
public class MyEntity
{
[DataMember(Order = 1)]
public String PropertyA { get; set; }
[DataMember(Order = 2)]
public int PropertyB { get; set; }
}
RuntimeTypeModel.Default.Add(typeof(MyEntity), false);
string proto = Serializer.GetProto<MyEntity>();
,并获得以下为proto
package ProtobufTest;
message MyEntity {
}
感谢快速反应!我使用相同的版本。我的'RuntimeTypeModel.Default.Add(typeof(MyEntity),...)'中的第二个参数实际上是'false'。有了“真”或根本没有这个电话,我就可以得到和你一样的结果。 – Mike
@Mike啊,对;是的,“false”意味着“不看属性”,其中包括不看“DataMember(Order = n)”属性。如果你通过'false',你需要手动配置* - 这就是我在上面的例子中所做的。如果您想使用'DataMember(Order = n)'属性:说'真' –
顺便说一句,最好让这些'.Add(1,“PropertyA”)'部件接受Expression作为第二个强类型和编译器检查的参数:)这将减轻非属性类型的工作量。 – Mike