【发布时间】:2009-07-16 17:23:56
【问题描述】:
我正在使用XmlSerializer.Serialize,它会产生换行符和不必要的空格。如何避免?
【问题讨论】:
-
旧,但我相信区别在于您使用的是 XmlWriter 还是 TextWriter。以我的经验,XmlWriter 默认为无格式。这是有道理的,因为它知道它正在编写格式无关紧要的文档,而文本编写器正在编写纯文本。
标签: .net xml xml-serialization
我正在使用XmlSerializer.Serialize,它会产生换行符和不必要的空格。如何避免?
【问题讨论】:
标签: .net xml xml-serialization
也许您可以使用接受XmlWriter 的重载,并使用XmlWriterSettings 实例配置给定的XmlWriter?
XmlWriterSettings 允许您控制换行和缩进的应用。
void Serialize(Object o)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = false;
settings.NewLineHandling = NewLineHandling.None;
//settings.OtherProperties = values;
using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings))
{
_serializer.Serialize(writer, o);
}
}
【讨论】:
_serializer.Serialize(writer, o);。很好的解决方案,谢谢!
有趣的是,我以为默认没有格式化。我刚刚尝试了以下并没有格式化:
using (var stream = new MemoryStream())
{
System.Text.Encoding encoding;
using (var writer = XmlWriter.Create(stream))
{
if (writer == null)
{
throw new InvalidOperationException("writer is null");
}
encoding = writer.Settings.Encoding;
var ser = new XmlSerializer(obj.GetType());
ser.Serialize(writer, obj);
}
stream.Position = 0;
using (var reader = new StreamReader(stream, encoding, true))
{
return reader.ReadToEnd();
}
}
在示例运行中,它返回了以下 XML:
<?xml version="1.0" encoding="utf-8"?><obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><childOne /><childTwo /><text>text1</text><text>text2</text></obj>
【讨论】:
还请检查序列化的类是否包含 XML 类型的成员(如 XmlElement)。我使用 Xsd2Code 工具从 XSD 生成类,并且(在非常特殊的情况下)它创建了 XmlElement 类型的成员。在序列化过程中,该成员有自己的格式(准确的标识)。即使我打开(或关闭)XmlSerializer 缩进,它对 XmlElement 成员也没有影响。
【讨论】: