我在反序列化具有xsi:type属性的xml节点时遇到问题。部分代码:
[XmlElement("ValueObject")]
public object ValueObject {
get
{...
}
set
{...
}
}
序列化后
值可以序列化很好(如图),但是当它被反序列化时,ValueObject没有类型信息,但System.Xml.XmlNode [3]。
这是在.net fx 4.0,C#
上任何想法为什么?
谢谢,
答案 0 :(得分:2)
您尚未发送代码,但在创建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>