1

xsi:type 属性を持つ xml ノードのデシリアライズで問題が発生しています。コードの一部:

    [XmlElement("ValueObject")]
    public object ValueObject       {
        get 
        {...
        }
        set 
        {...
        }
    }

連載後

http://imgur.com/uEJ1s

値は正常にシリアル化できますが (写真)、逆シリアル化すると、ValueObject には System.Xml.XmlNode[3] 以外の型情報がありません。

これは.net fx 4.0、C#でした

理由はありますか?

ありがとう、

4

1 に答える 1

2

コードを送信していませんが、XmlSerializer を作成するときに、可能な派生型のリストを示していなかったと思います。以下は、Value のオブジェクトの派生型として DateTime と float を使用する例です。

using System;
using System.IO;
using System.Xml.Serialization;

public class Test
{
        public class ValueObject
        {
            [XmlElement("Value")] // This XML array does not have a container
            public object[] Values;
            public ValueObject() {}
        }

        static void Main(string[] args)
        {
            ValueObject value1 = new ValueObject();
            value1.Values = new object[] { DateTime.Now, 3.14159f };
            save("test.xml", value1);
            ValueObject value2 = load("test.xml");
        }

        static void save(string filename, ValueObject item)
        {
            XmlSerializer x = new XmlSerializer(typeof(ValueObject), new Type[] { typeof(DateTime), typeof(float) });
            FileStream fs = new FileStream(filename, FileMode.Create);
            x.Serialize(fs, item);
            fs.Close();
        }

        static ValueObject load(string filename)
        {
            XmlSerializer x = new XmlSerializer(typeof(ValueObject), new Type[] { typeof(DateTime), typeof(float) });
            FileStream fs = new FileStream(filename, FileMode.Open);
            ValueObject valueObject = (ValueObject)x.Deserialize(fs);
            fs.Close();
            return valueObject;
        }
}

このコードによって生成および使用される XML は次のとおりです。

<?xml version="1.0"?>
<ValueObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Value xsi:type="xsd:dateTime">2011-04-16T00:15:11.5933632+02:00</Value>
  <Value xsi:type="xsd:float">3.14159</Value>
</ValueObject>
于 2011-04-15T22:21:18.560 に答える