我有一個與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