2

外部APIを使用してxmlを受信し、これをオブジェクトにシリアル化していますが、デバッグと監査のためにシリアル化に使用された元のxmlを保持できる方法が必要です。

これが私がシリアル化する方法のサンプルです:

XmlReader reader = this.Execute(url);
return Read<Property>(reader, "property");

Execute()ルーチンの抽出:

StringBuilder sb = new StringBuilder();
Stream s = response.GetResponseStream();
XmlReader reader = XmlReader.Create(s);
return reader;

Read()は、ネイティブxmlシリアル化をまとめるだけです。

private T Read<T>(XmlReader reader, string rootElement)
{
  XmlRootAttribute root = new XmlRootAttribute();
  root.ElementName = rootElement;
  root.IsNullable = true;
  XmlSerializer xmlSerializer = new XmlSerializer(typeof(T), root);
  object result = xmlSerializer.Deserialize(reader);
  return (T)result;
}

リーダーを使用すると表示されるのを確認しましたが、再度使用することはできません(読み取りストリームのみを転送しますか?)。あまり変更しようとせずに、リーダーの組み込みのシリアル化の恩恵を受けながら、リーダーのコンテンツをxmlとして抽出するにはどうすればよいですか?

いいのは、outパラメータを使用してReadを調整することです。

private T Read<T>(XmlReader reader, string rootElement, out string sourceXml);
4

2 に答える 2

0

フィドラーを使用します。

Fiddlerは、コンピューターとインターネット間のすべてのHTTP(S)トラフィックをログに記録するWebデバッグプロキシです。Fiddlerを使用すると、トラフィックを検査し、ブレークポイントを設定し、着信データまたは発信データを「フィドル」することができます。Fiddlerには、強力なイベントベースのスクリプトサブシステムが含まれており、任意の.NET言語を使用して拡張できます。

于 2012-09-15T07:43:29.103 に答える
0

this.Execute(url)のコードを共有していませんが、おそらくストリームからリーダーを作成しています。最初にそのストリームを文字列に書き込み、次にそれをどこかで使用します。ストリームがシーク可能でない場合は、それを破棄して、そこから新しいストリームを作成します。

また、XmlSerializerはリーダーの代わりにストリームを取得できるため、リーダーに煩わされることはなく、メソッド間でストリームを渡すだけでよいことに注意してください。

于 2012-06-23T16:02:06.977 に答える