2011-08-30 113 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(); 

}

相關問題