带有无参数构造函数的XmlSerializer,没有公共属性或字段......有可能吗?

时间:2009-06-30 20:25:05

标签: c# .net xml-serialization

拥有以下课程(.Net 3.5):

public class Something
{
    public string Text {get; private set;}

    private Something()
    {
        Text = string.Empty;
    }

    public Something(string text)
    {
        Text = text;
    }
}

此序列化没有错误,但生成的XML不包含Text属性,因为它没有公共setter。

有没有办法(更简单,更好)让XmlSerializer包含这些属性?

3 个答案:

答案 0 :(得分:4)

XmlSerializer只关心公共读/写成员。一种选择是实施IXmlSerializable,但这是很多的工作。更实用的选择(如果可用且合适)可以使用DataContractSerializer

[DataContract]
public class Something
{
    [DataMember]
    public string Text {get; private set;}

    private Something()
    {
        Text = string.Empty;
    }

    public Something(string text)
    {
        Text = text;
    }
}

这适用于公共成员和私有成员,但生成的xml不完全相同,并且您无法指定xml属性。

答案 1 :(得分:0)

没有。 XML序列化只会序列化公共读/写字段和对象的属性。

答案 2 :(得分:-1)

Try

[Serializable] public class Something { ... }