2011-08-30 8 views
0

MSDNのドキュメントによると、XMLWriter.WriteValueはxmlに単純なCLR型のxsd型情報を書き込みます。 XMLが解析されると、XMLReader.ReadContentAsObjectは適切に型付けされたオブジェクトを読み込みます。しかし、これは常に私のための文字列オブジェクトを返すようであり、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の2つのパブリックプロパティを持つ別のクラスを作成したので、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(); 

}

関連する問題