繁体   English   中英

使用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文档状态:

您只能将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM