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したがって、回避策の1つは、属性の代わりに値を使用することです。

4

3 に答える 3

2

オブジェクトを属性としてシリアル化することはできません。つまり、(おそらく)複雑なオブジェクトを文字列にシリアル化する必要があります。

XmlAttributeAttributeドキュメントが述べているように:

XmlAttributeAttributeは、XMLスキーマ定義言語(XSD)の単純型(XSDから派生したすべての組み込みデータ型を含む)の1つにマップできる値(または値の配列)を返すパブリックフィールドまたはパブリックプロパティにのみ割り当てることができます。 anySimpleTypeタイプ)。可能なタイプには、Guid、Char、列挙など、XSD単純タイプにマップできるものが含まれます。XSDタイプのリストと、それらが.NETデータ型にどのようにマップされるかについては、DataTypeプロパティを参照してください。

于 2012-04-18T15:22:59.377 に答える
2

xmlattributeをオブジェクトにシリアル化することはできません。を使用して無視するか、を使用[XmlIgnore]して文字列としてロード[XmlAttribute("value", typeof(string)]し、postオブジェクトの構築で任意のタイプに変換する必要があります。

于 2012-04-18T15:29:58.530 に答える
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 に答える