【问题标题】:XmlSerializer preserve whitespace during serialization to XMLXmlSerializer 在序列化为 XML 期间保留空格
【发布时间】:2015-10-13 10:45:13
【问题描述】:

我将 XmlSerializer 用于 Object -> Xml 序列化。当我的对象中的字符串属性为空或仅包含空格时,序列化程序只会返回<SomeProperty/>

如何在序列化过程中保留空格?

还有后续,如果我放多个空格SomeProperty = " ";,我也想将它们序列化,所以<SomeProperty> </SomeProperty>

var xmlSerializer = new XmlSerializer(typeof(T));
var xmlWriterSetting = new XmlWriterSettings()
{
    Encoding = System.Text.Encoding.Default,
    Indent = false,
    OmitXmlDeclaration = true
};

using (var stringWriter = new StringWriter())
using (var xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSetting))
{
    xmlSerializer.Serialize(xmlWriter, InputObject);
    return stringWriter.ToString();
 }

【问题讨论】:

  • 无法重现。当我使用您的代码(使用 VS 2015 和 .NET 4.5.2)时,我得到了空格。您也可以发布课程声明吗?那里可能有区别..
  • @Volkan Paksoy 我发现了问题,代码确实可以正确序列化(正确保留空格)但是在前端我使用带有默认 XSLT 的 控件( Microsoft 使用)来显示数据 - 此控件无法正确显示。我应该在一开始就检查调试。感谢您让我进行调试和检查!

标签: c# xmlserializer


【解决方案1】:

您可以控制 XML 本身中的空白处理。所以你应该这样写属性:

<SomeProperty xml:space="preserve">     </SomeProperty>

为此,只需使用 writer 添加属性:

xmlWriter.WriteAttributeString("xml", "space", null, "preserve");

当您回读此 XML 时,这些空格将被视为重要的空格,即使您忽略阅读器配置中的空格,也会返回这些空格。

【讨论】:

  • 与我的问题有关,但这将用于反序列化-尽管非常有用,但会保存以备将来使用!谢谢!
  • 嗯,我看不出这对XmlSerializer 有什么帮助,对吗?
  • @Ivan, Uporabnik003:您可以为需要这种特殊处理的类实现IXmlSerializable。在那里,您有一个带有 XmlWriterWriteXml 方法,因此您可以添加属性。
  • 重点是这不是一种特殊处理——只是带有空格的字符串属性。无论如何,对于XmlSerializer,整个讨论和答案都是毫无意义的,因为XmlSerializer 确实将空格保留在属性值内,因此不需要任何控制或特殊处理。正如 OP 所说,问题是不同的,所以让我们停在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2023-04-05
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多