Вы не отправили свой код, но я предполагаю, что вы не указали список возможных производных типов при создании XmlSerializer. Вот пример, который использует DateTime и float, как производные типы объекта, для Value:
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>