1

继上一个问题之后,我无法将建议的 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> 元素可以正常工作。有任何想法吗?

4

3 回答 3

3

问题是该属性没有设置器。即使可以获得序列化它的值,它也不能被反序列化,因为没有办法将值放回新对象中。

于 2009-09-08T11:16:07.300 回答
1

按照设计,XML 序列化只会序列化公共读/写属性和公共字段。

于 2009-09-09T10:11:31.367 回答
0

不知道问题是什么(我一直发现 XML 序列化程序的行为是多变的),但为什么不使用Nullable<T>该类呢?不要重新发明轮子:)

于 2009-09-08T11:07:16.880 回答