使用System.Xml.Serialization序列化对象?

时间:2012-04-18 15:07:10

标签: c# xml serialization

我有一个序列化为XML的类。该类有一个Object成员变量。如何正确序列化此项?显然,它应该写成一个字符串,但读取后,它应该成为任何类型。

public class MyClass
{
    public MyClass()
        : this("", null)
    {
    }

    public MyClass(String name, Object value)
    {
        Name = name;
        Value = value;
    }

    [XmlAttribute("name")]
    public String Name;

    [XmlAttribute("value")] // Won't work!
    public Object Value;
}

修改:有趣的是,[XmlElement()]能够序列化Object类型。因此,一种解决方法是使用值而不是属性。

3 个答案:

答案 0 :(得分:2)

您无法将Object序列化为属性 - 这意味着您必须将(可能的)复杂对象序列化为字符串。

作为XmlAttributeAttribute docs州:

  

您只能将XmlAttributeAttribute分配给返回值(或值数组)的公共字段或公共属性,这些值可以映射到XML架构定义语言(XSD)简单类型之一(包括派生的所有内置数据类型)来自XSD anySimpleType类型)。可能的类型包括可以映射到XSD简单类型的任何类型,包括Guid,Char和枚举。请参阅DataType属性以获取XSD类型列表以及它们如何映射到.NET数据类型。

答案 1 :(得分:2)

您无法将xmlattribute序列化为对象。要么必须使用[XmlIgnore]忽略它,要么使用[XmlAttribute("value", typeof(string)]将其加载为字符串,并将其转换为post对象构造中的任何类型。

答案 2 :(得分:1)

你可以这样做(但由于对象类型,反序列化显然不会起作用):

private object m_object = null;

[XmlAttribute("value")]
public string ObjectValue
{
get { return m_object.ToString();}
set { m_object = value;}
}

[XmlIgnore]
public object Value
{
get { return m_object; }
set { m_object = value; }
}