![](/img/trans.png)
[英]Build a Custom Serialization as String in System.Xml.Serialization
[英]Serialize Object using System.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
类型。 因此,一种解决方法是使用值而不是属性。
您不能将对象序列化为属性-这意味着您必须将(可能)复杂对象序列化为字符串。
您只能将XmlAttributeAttribute分配给返回可以映射到XML架构定义语言(XSD)简单类型之一(包括从XSD派生的所有内置数据类型)的值(或值数组)的公共字段或公共属性。 anySimpleType类型)。 可能的类型包括可以映射到XSD简单类型的任何类型,包括Guid,Char和枚举。 有关XSD类型及其如何映射到.NET数据类型的列表,请参见DataType属性。
您不能将xmlattribute序列化为对象。 您必须使用[XmlIgnore]
忽略它,或者使用[XmlAttribute("value", typeof(string)]
将其加载为字符串[XmlAttribute("value", typeof(string)]
然后将其转换为post对象构造中的任何类型。
您可以执行此操作(但是由于对象类型的原因,反序列化显然无法工作):
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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.