我有一个序列化为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
类型。因此,一种解决方法是使用值而不是属性。
答案 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; }
}