根据MSDN文档,XMLWriter.WriteValue将xsd类型信息写入xml,以用于简单的CLR类型。然后,XMLReaderConadAsObject会在解析XML时读出适当类型的对象。但是,这似乎总是为我返回一个字符串对象,而XMLReader的ValueType属性是字符串。我已经尝试插入longs和DateTimes,但它们总是以字符串形式结束。我有什么想法,或者这是一个Windows Phone错误吗?
XML编写代码
public void WriteXml(XmlWriter writer) {
// KeyValuePair<string, object> pair initialized previously
writer.WriteStartElement(pair.Key);
writer.WriteValue(pair.Value)
writer.WriteEndElement();
}
XML解析代码
public void ReadXml(XMLReader reader) {
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element) {
Type T = reader.ValueType; // T is string
reader.ReadStartElement();
object o = reader.ReadContentAsObject(); // o is string
o = reader.ReadContentAs(T, null); // o is string
}
}
}
答案 0 :(得分:0)
您需要使用模式文件(XSD),以便框架可以推断节点的类型。否则ValueType将始终返回System.String。
答案 1 :(得分:0)
如果在解析内容时发生验证错误,并且reader是由Create方法创建的XmlReader对象,则阅读器将内容作为字符串返回。换句话说,当发生验证错误或警告时,内容被视为无类型。
答案 2 :(得分:0)
我让这太难了。我的目标是通过遍历其KeyValuePairs来序列化具有泛型类型(字符串,对象)的字典,但该类似乎不能使用XmlSerializer进行序列化。我刚刚创建了另一个具有两个公共属性Key和Value的类,所以我可以使用XmlSerializer。使用XmlSerializer进行反序列化时,只要它是受支持的CLR类型,就会恢复Value的类型。
public void WriteXml(XmlWriter writer) {
// KeyValuePair<string, object> pair initialized previously
writer.WriteStartElement("entry");
MyClass toSerialize = new MyClass(pair.Key, pair.Value);
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
serializer.Serialize(writer, toSerialize);
writer.WriteEndElement();
}