我們嘗試使用protobuf-net,但無法理解我們現在在自定義RuntimeTypeModel中禁用的UseImplicitZeroDefaults。我們最初使用默認的RuntimeTypeModel,但注意到即使指定了DefaultValue也不會克隆布爾屬性,即DefaultValue = true,但設置爲false時,克隆屬性將始終爲true。protobuf-net UseImplicitZeroDefaults和枚舉默認值
我們通過創建一個自定義的RuntimeTypeModel來解決這個問題,它允許我們將UseImplicitZeroDefaults設置爲false。但將其設置爲false會導致以下錯誤;
ProtoBuf.ProtoException: No wire-value is mapped to the enum
請注意,我們的一些枚舉是非零基礎的,這可能會導致一個問題?我們如何克隆/序列化布爾屬性和枚舉(基於非零和零的混合)?
編輯:我使用了一些信息,在發現:protobuf-net enum serialization並且可以報告:
[ProtoMember(10), DefaultValue(SiteType.Partition)]
public SiteType Type { get; set; }
仍然導致了「無絲價值」的錯誤。
[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }
仍導致「無線值」錯誤。
public enum SiteType
{
Error = 0,
...
這個工程,但理想情況下,我們想離開我們的枚舉乾淨。
也許一個更清潔的方式來指定默認值:
[DefaultValue(SiteType.Server)]
public enum SiteType
{
Server = 1,
Monkey = 2
...
我得看看 - 今晚太晚了;但是:如果你設置了IsRequired = true,它會起作用嗎? –
IsRequired設置在屬性級別,但是爲了避免過度裝飾我們使用的[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]類。所以我們不在物業層面設置任何東西,也許我們應該! – paligap
我會調查,看看這裏是否有問題 –