【问题标题】:How to include Declaration with XElement.ToString()如何使用 XElement.ToString() 包含声明
【发布时间】:2012-01-28 17:36:57
【问题描述】:

我正在尝试为我的 Web 服务编写 XML 响应,但是我不知道如何使声明出现在响应中。

我的代码是这样的:

StringBuilder sBuilder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sBuilder))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("ReportResponse");
    Response.WriteXml(writer);
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

var response = XElement.Parse(sBuilder.ToString());
return response;

Response 只是一个用于存储响应数据的 POCO。

我知道Save 方法包含声明,而ToString() 方法不包含。我需要用ToString() 写回我的声明。

我真的只想从我的 REST 服务返回自定义 XML,而不需要将字符串转换 100 次以返回有效 XML。这甚至有可能还是只是在旋转我的轮子?

【问题讨论】:

  • 为什么不使用一个类,然后将其序列化为 XML?
  • 我可以使用这种方法,但由于不同的原因我遇到了同样的问题。
  • 如果您想要 XML 声明,为什么要返回 XElement 而不是 XDocument
  • 另外,你为什么关心声明?如果您只是返回一个响应 object 并让 WCF 序列化程序将您的数据协定对象转换为 XML,那么您不必担心响应 XML 是否有效。如果您确实需要出现声明并且默认情况下不需要,那么您将在服务级别配置,而不是在每个方法上配置。
  • 我们不使用默认编码,并且 xml 标头指定了这一点。

标签: c# xml serialization wcf-rest


【解决方案1】:

如果你想包含 xml 声明,你可以这样做:

XDocument xdoc = XDocument.Parse(xmlString);
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
    xdoc.Save(writer);
}
Console.WriteLine(builder);

更新: 我注意到,StringWriter 破坏了编码。所以另一种选择是这样做:

string docWithDeclaration = xdoc.Declaration + xdoc.ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2016-06-18
    • 2020-06-16
    • 2020-01-08
    • 2016-10-17
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多