2011-08-30 115 views
0

根据MSDN文档,XMLWriter.WriteValue将xsd类型信息写入xml以获取简单CLR类型。然后XMLReader.ReadContentAsObject应该在解析XML时读出适当类型的对象。但是,这似乎总是为我返回一个字符串对象,并且XMLReader的ValueType属性是字符串。我试过插入long和DateTimes,但它们总是以字符串结尾。任何想法我做错了或这是一个Windows Phone的错误?XmlReader.ReadContentAsObject始终返回字符串类型

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

你需要使用一个模式文件(XSD),因此,该框架可以推断出一个节点的类型。否则ValueType将始终返回System.String。

0

MSDN says

如果在分析的内容和读出器是由创建方法创建的XmlReader对象发生验证错误,读取器返回内容为字符串。换句话说,当发生验证错误或警告时,内容被认为是无类型的。

0

我让这太难了。我的目标是通过遍历它的KeyValuePairs序列化泛型类型(字符串,对象)的字典,但该类似乎不能使用XmlSerializer进行序列化。我只是用两个公共属性Key和Value创建了另一个类,所以我可以使用XmlSerializer。使用XmlSerializer进行反序列化时,只要它是受支持的CLR类型,值的类型就会被恢复。

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(); 

}

相关问题