0

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

4

3 回答 3

2

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

于 2012-04-18T15:29:58.530 回答
2

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

正如XmlAttributeAttribute 文档所述

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

于 2012-04-18T15:22:59.377 回答
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; }
}
于 2012-04-18T15:27:28.643 回答