私は、xmlNodeの配列を返すサードパーティのJavaベースのRESTWebサービスを使用しています。
xmlNode []はオブジェクトを表し、オブジェクト内のxmlNode []を逆シリアル化するための最良の方法を見つけようとしていますか?最初にxmlDocumentを作成し、逆シリアル化するのですか?
ありがとう
私は、xmlNodeの配列を返すサードパーティのJavaベースのRESTWebサービスを使用しています。
xmlNode []はオブジェクトを表し、オブジェクト内のxmlNode []を逆シリアル化するための最良の方法を見つけようとしていますか?最初にxmlDocumentを作成し、逆シリアル化するのですか?
ありがとう
WCF Rest Starter Kitプレビューがインストールされている場合は、巧妙なトリックがあります。
これにより、クリップボードにあるXMLが、その正確なXMLを逆シリアル化できるC#クラスとしてプロジェクトに貼り付けられます。かなり気の利いた!
それについてのこれらのブログ投稿を参照してください:
それはあなたに多くのタイピングを節約し、人生をずっと楽にするはずです!
更新:
OK、戻ってきたXMLからクラスがすでに生成されています。XmlNode
次に、をクラスに変換する必要があります。
次のようなことをする必要があります。
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;
}
のXML表現(プロパティ.OuterXml
)をXmlNode
ストリーム(ここではMemoryStream
)に書き込んでから、を使用しXmlSerializer
てそのストリームからオブジェクトをシリアル化する必要があります。
あなたは一般的なメソッドでそれを行うことができ、
Customer myCustomer = ConvertNode<Customer>(xmlNode);
または、そのコードをXmlNode
クラスの拡張メソッドに変換して、次のように記述することもできます。
Customer myCustomer = xmlNode.ConvertNode<Customer>();
マーク
多分これはここで答えるには遅すぎますが、それは他の人を助けるでしょう:
Deserialize
XMLノードから実行できるソリューションは次のとおりです。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo");
XmlSerializer serial = new XmlSerializer(typeof(SystemInfo));
using(XmlNodeReader reader = new XmlNodeReader(xmlNode)) {
SystemInfo syso =(SystemInfo)serial.Deserialize(reader);
}
最初にXMLをロードしてから、すべてのXMLドキュメントからSystemInfoオブジェクトノードがXmlDocument Object
必要な場合と同じように、逆シリアル化する親ノードを見つけます。
それが見つかったら、必要XmlSerializer
な特定のクラスタイプでオブジェクトを作成します。
reader
(で作成されたusing
)をDeserializeメソッドに渡すだけで、syso
オブジェクトにXML値を入力したのと同じように、オブジェクトがクラスオブジェクトに入力されます。
ハッピーコーディング:)
これを行う最も簡単な方法は、.NETに組み込まれているSystem.Xml.Serialization.XmlSerializerクラスを使用することです。XmlSerializerでグーグル検索すると、あなたに合ったチュートリアルを見つけるために使用できるたくさんのチュートリアルが提供されます。