首页 > 解决方案 > C# - 在 BinaryFormatter 反序列化中设置默认 int 值

问题描述

我有以下课程:

[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?谢谢

标签: c#.netserializationdeserializationbinaryformatter

解决方案


您可以按照本文档中的说明尝试 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;
}

推荐阅读