继上一个问题之后,我无法将建议的 Lazy<T> 泛型与我的 XML 序列化结合起来。
这是我用于 Lazy<T> 的功能:
public struct Lazy<T> where T : class, new()
{
private T _Value;
public bool HasValue
{
get
{
return (_Value != null);
}
}
public T Value
{
get
{
if (!HasValue)
_Value = new T();
return _Value;
}
}
}
现在MSDN 文档说在属性上有一个 [XmlElement("ElementName")] 很好,而且它确实似乎能够很好地反序列化。当我序列化一个对象时,问题就来了。我正在运行以下代码:
class SomeClass
{
[XmlElement("ExternalElementName")]
public ComplexElementType InternalElementName
{
get { return _InternalElementName.Value; }
}
protected Lazy<ComplexElementType> _InternalElementName;
}
别处:
SomeClass someClass = new SomeClass();
someClass.InternalElementName.ComplexElementTypeChild = "some string";
// serialize...
奇怪的是,这在调试器中运行良好,但在 XML 中没有输出任何元素。非 Lazy<T> 元素可以正常工作。有任何想法吗?