繁体   English   中英

C# - 在 BinaryFormatter 反序列化中设置默认 int 值

[英]C# - Setting default int value in BinaryFormatter deserialization

我有以下课程:

[Serializable]
public class Message
{  public string messageSummary;
   public DateTime messageDate;
}

后来,我决定在类中添加另一个 int 字段 - messageNumber

[Serializable]
public class Message
{  
    public string messageSummary;
    public DateTime messageDate;
    public int messageNumber;
}

在反序列化中,当反序列化旧的序列化Message类(没有messageNumber字段)时 - 如何将 messageNumber 的默认值设置为 -1 而不是 0?

我试图用[OnDeserialized()]属性定义一个方法,但messageNumber已经设置为 0。0 也可以是messageNumber的值,所以我不能在该方法中覆盖它。 是否可以将默认值设置为 -1? 谢谢

[OnDeserialized]发生在反序列化之后。 如果要设置默认值,可以定义[OnDeserializing] 序列化回调

[OnDeserializing]
private void SetMessageNumberDefault(StreamingContext sc)
{
    messageNumber = -1;     // add default value
}

您可以按照本文档中的描述尝试使用 DefaultValueAttribute。 您可以尝试以下解决方案:

[Serializable]
public class Message
{
    public const int Int_Default = -1;
    public string messageSummary;
    public DateTime messageDate;
    [System.ComponentModel.DefaultValue(Int_Default)]
    public int messageNumber { get; set; } = Int_Default;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM