[英]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.