我参加了以下课程:
[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吗?谢谢
[OnDeserializing]
private void SetMessageNumberDefault(StreamingContext sc)
{
messageNumber = -1; // add default value
}
您可以按照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;
}