簡體   English   中英

C#protobuf-net - 默認值覆蓋protobuf數據的值

[英]C# protobuf-net - default value overwrites value from protobuf data

我需要使用protobuf-net serialize/deserialize類。 對於我的類的一些屬性,我需要定義一個默認值。 我通過設置屬性的值來做到這一點。 在某些情況下,此默認值會覆蓋protobuf數據中的值。

代碼示例:

public class Program
{
    static void Main(string[] args)
    {
        var target = new MyClass
        {
            MyBoolean = false
        };

        using (var stream = new MemoryStream())
        {
            Serializer.Serialize(stream, target);
            stream.Position = 0;
            var actual = Serializer.Deserialize<MyClass>(stream);
            //actual.MyBoolean will be true
        }
    }
}

[ProtoContract(Name = "MyClass")]
public class MyClass
{
    #region Properties

    [ProtoMember(3, IsRequired = false, Name = "myBoolean", DataFormat = DataFormat.Default)]
    public Boolean MyBoolean { get; set; } = true;

    #endregion
}

反序列化數據后,MyBoolean的值為true。

我該如何解決這個問題?

出於性能原因,默認值根本不是序列化的。 bool的默認值為false。 您的默認值為true。 要使這項工作,您必須使用DefaultValueAttribute使您的默認值為已知:

    [ProtoMember( 3, IsRequired = false, Name = "myBoolean", DataFormat =  DataFormat.Default )]
    [DefaultValue(true)]
    public Boolean MyBoolean { get; set; } = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM