.NET XmlSerializer:在属性设置器具有其他代码时进行序列化

时间:2016-03-03 15:17:33

标签: c# .net xml serialization

我有一个(很多缩写)这样的类:

public class Widget
{
  public List<Widget> SubWidgets { get; set; }
  public Widget ParentWidget { get; set; }

  private double _ImportantValue;
  public double ImportantValue
  {
    get { return _ImportantValue; }
    set
    {
      _ImportantValue = value;
      RecalculateSubWidgets();
    }
  }
}

反序列化时,我不想RecalculateSubWidgets。处理这种情况的最佳方法是什么?到目前为止,我唯一能够提出的是设置一个“全局”变量,表示我正在反序列化并在这种情况下跳过对RecalculateSubWidgets()的调用,但这看起来非常糟糕。

1 个答案:

答案 0 :(得分:0)

一种简单的方法可以是忽略当前属性并使用另一个属性来获取反序列化的值:

private double _ImportantValue;

[XmlElement("ImportantValue")]
public double ImportantValueFromXml
{
    get { return _ImportantValue; }
    set
    {
        _ImportantValue = value;
    }
}

[XmlIgnore]
public double ImportantValue
{
    get { return _ImportantValue; }
    set
    {
        _ImportantValue = value;
        RecalculateSubWidgets();
    }
}

反序列化时,RecalculateSubWidgets()方法不会被调用,但您的私有字段仍将具有该值。当然,您可能希望稍微改变您的设计并摆脱设置器中的函数调用以避免这种情况,但这可能是一个短期解决方案。