15

私は、xmlNodeの配列を返すサードパーティのJavaベースのRESTWebサービスを使用しています。

xmlNode []はオブジェクトを表し、オブジェクト内のxmlNode []を逆シリアル化するための最良の方法を見つけようとしていますか?最初にxmlDocumentを作成し、逆シリアル化するのですか?

ありがとう

4

3 に答える 3

29

WCF Rest Starter Kitプレビューがインストールされている場合は、巧妙なトリックがあります。

  • VisualStudioを開きます
  • XMLノードの内容(ノードの1つを構成するXML)を選択し、クリップボードにコピーします
  • Visual Studioの[編集]メニューから、[XMLを種類として貼り付ける]を選択します

これにより、クリップボードにある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>();

マーク

于 2009-10-14T07:15:11.710 に答える
14

多分これはここで答えるには遅すぎますが、それは他の人を助けるでしょう:

DeserializeXMLノードから実行できるソリューションは次のとおりです。

 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値を入力したのと同じように、オブジェクトがクラスオブジェクトに入力されます。

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

于 2016-09-27T07:10:03.770 に答える
-1

これを行う最も簡単な方法は、.NETに組み込まれているSystem.Xml.Serialization.XmlSerializerクラスを使用することです。XmlSerializerでグーグル検索すると、あなたに合ったチュートリアルを見つけるために使用できるたくさんのチュートリアルが提供されます。

于 2009-10-14T01:58:12.257 に答える