我正在尝试XmlSerializer
从 C# 中使用来保存一个类,该类具有一些由属性读取的值(代码只是对字段值的简单检索)但由 setter 函数设置(因为如果值更改,则会调用一个委托)。
我目前正在做的就是这种事情。预期用途是使用InT
属性来读取值,并使用SetInT
来设置它。设置它有副作用,所以这里的方法比属性更合适。XmlSerializationOnly_InT
仅为(因此得名)的利益而存在XmlSerializer
,不应被普通代码使用。
class X
{
public double InT
{
get { return _inT; }
}
public void SetInT(double newInT)
{
if (newInT != _inT)
{
_inT = newInT;
Changed();//includes delegate call; potentially expensive
}
}
private double _inT;
// not called by normal code, as the property set is not just a simple
// field set or two.
[XmlElement(ElementName = "InT")]
public double XmlSerializationOnly_InT
{
get { return InT; }
set { SetInT(value); }
}
}
这很有效,很容易做到,并且 XML 文件看起来像您期望的那样。虽然是体力劳动,而且有点丑,所以我只是有点满意。我真正想要的是能够告诉 XML 序列化使用属性读取值,并使用 setter 函数设置它。那我就完全不需要XmlSerializationOnly_InT
了。
我似乎通过以这种方式区分属性集和设置器函数来遵循标准做法,所以我确定我不是唯一遇到过这种情况的人(尽管谷歌建议我可能是)。在这种情况下,其他人做了什么?有没有一些简单的方法可以说服他们XmlSerializer
更好地处理这类事情?如果没有,是否有其他简单的方法可以做到这一点?