C# - Установка значения int по умолчанию в десериализации BinaryFormatter - PullRequest
1 голос
/ 30 марта 2020

У меня был следующий класс:

[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? Спасибо

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Вы можете попробовать 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;
}
0 голосов
/ 30 марта 2020

[OnDeserialized] происходит после десерализации. Если вы хотите установить значение по умолчанию, вы можете определить [OnDeserializing] обратный вызов сериализации

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