2009-10-13 22 views
8

私はサードパーティ製のJavaベースのREST Webサービスで、xmlNodesの配列を返しています。xmlNode to objects

xmlNode []はオブジェクトを再提示し、オブジェクト内のxmlNode []を逆シリアル化する最適な方法を試していますか?最初にxmlDocumentを構築し、Deserializeを作成するのですか?

おかげ

答えて

22

、巧妙なトリックがあります:

  • オープンのVisual Studio
  • あなたのXMLノードのコンテンツ(あなたのノードの1つを構成するXML)を選択してコピーVisual Studioで、あなたの「編集」メニューからクリップボード
  • には、これはC#クラスとしてプロジェクトにクリップボード上にある、あなたのXMLを貼り付けます

「タイプとして貼り付けXML」を選びますその正確なXMLをデシリアライズすることができます。かなり元気!

それについてのこれらのブログの記事を参照してください:あなたの入力の手間を節約し、生活が非常に簡単にする必要があります

UPDATE:
OK、あなたはすでにあなたが戻って取得XMLから生成されたあなたのクラスがあります。今度はあなたのクラスにXmlNodeを変換する必要があります。

あなたはこのような何かする必要があります:あなたは(ここではMemoryStream)ストリームにXmlNodeのXML表現(プロパティ.OuterXml)を記述する必要が

private static T ConvertNode<T>(XmlNode node) where T: class 
{ 
    MemoryStream stm = new MemoryStream(); 

    StreamWriter stw = new StreamWriter(stm); 
    stw.Write(node.OuterXml); 
    stw.Flush(); 

    stm.Position = 0; 

    XmlSerializer ser = new XmlSerializer(typeof(T)); 
    T result = (ser.Deserialize(stm) as T); 

    return result; 
} 

をして、シリアル化するためにXmlSerializerを使用そのストリームからオブジェクトを戻します。

あなたは、一般的な方法でそれを行うと

Customer myCustomer = ConvertNode<Customer>(xmlNode); 

を呼び出すか、あなたが書くことができるので、あなたもXmlNodeクラスの拡張メソッドのいずれかにそのコードを回すことができることができます。

Customer myCustomer = xmlNode.ConvertNode<Customer>(); 

マルク

+0

こんにちは、私はすでにxsdのオブジェクトを持っていますので、このステップを行うのは本当にありません。私はxmlNodes [](シリアル化されたオブジェクト)から行く最善の方法を学びたいと思っています。 – 76mel

-1

.NETでSystem.Xml.Serialization.XmlSerializerクラスに建て使用することですこれを行う最も簡単な方法。 XmlSerializerでのGoogle検索は、あなたのために働くチュートリアルを見つけるのに使うことができるたくさんのチュートリアルを提供します。あなたはWCF休憩スターターキットプレビューがインストールされている場合は

+1

明らかで有用ではありません。もちろんXMLSerializerが必要ですが、XMLノードがあり、文字列やストリームはありません。幸いにも、Googleの検索では、この質問に対する他の有益な答えが提供されます。 – edc65

4

ここで答えが遅すぎるかもしれませんが、他の人に役立つでしょう:

XMLノードからDeserializeにできる解決策は次のとおりです。

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xml); 

XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo"); 

XmlSerializer serial = new XmlSerializer(typeof(SystemInfo)); 

SystemInfo syso =(SystemInfo)serial.Deserialize(new XmlNodeReader(xmlNode)); 

まず負荷XmlDocument ObjectにXML、その後、あなたはすべてのXML文書から、私はシステム情報対象ノードをしたいだけのようデシリアライズしたくなります親ノードを見つけます。

特定のクラスタイプのXmlSerializerオブジェクトを作成したら、それを探してください。

は今ちょうどあなたがちょうど私がXML値を持つsysoオブジェクトを取り込まようにクラスオブジェクトに移入するオブジェクトを取得します、デシリアライズ方法にnew XmlNodeReader(xmlNode)を渡します。

ハッピーコーディング:)

関連する問題