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

您没有共享 this.Execute(url) 的代码,但大概是您从流中构建了一个阅读器。首先将该流写入字符串,然后在某处使用它。如果流不可搜索,则将其释放并从中创建一个新流。

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

于 2012-06-23T16:02:06.977 回答
0

使用提琴手

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

于 2012-09-15T07:43:29.103 回答