【问题标题】:C# - Setting default int value in BinaryFormatter deserializationC# - 在 BinaryFormatter 反序列化中设置默认 int 值
【发布时间】:2020-07-10 17:32:24
【问题描述】:

我有以下课程:

[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# .net serialization deserialization binaryformatter


【解决方案1】:

[OnDeserialized] 发生在反序列化之后。如果你想设置默认值,你可以定义[OnDeserializing]serialization callback

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

【讨论】:

    【解决方案2】:

    您可以尝试 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多