コードを送信していませんが、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>