在保留原始xml的同时将xml序列化为对象?

时间:2012-06-23 15:51:59

标签: c# xml xml-serialization xmlreader

我正在使用外部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 param调整Read是个不错的选择:

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

2 个答案:

答案 0 :(得分:0)

您没有共享此代码。执行(url),但可能是您从流中构建了一个阅读器。首先将该流写入字符串,然后在某处使用它。如果流不可搜索,请将其丢弃并从中创建新流。

另外,请注意XmlSerializer可以使用流而不是读取器,因此您永远不会打扰读者,只需在您的方法之间传递流。

答案 1 :(得分:0)

使用fiddler

Fiddler是一个Web调试代理,它记录您的计算机和Internet之间的所有HTTP(S)流量。 Fiddler允许您检查流量,设置断点,并“输入”传入或传出的数据。 Fiddler包含一个功能强大的基于事件的脚本子系统,可以使用任何.NET语言进行扩展。