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

问题描述 投票:1回答:2

我参加了以下课程:

[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。messageNumber的值也可以为0,所以我不能在该方法中覆盖它。可以将默认值设置为-1吗?谢谢

c# serialization deserialization binaryformatter
2个回答
0
投票

您可以定义serialization callback

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

0
投票

您可以按照this documentation中的说明尝试使用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;
}
© www.soinside.com 2019 - 2024. All rights reserved.