如何在没有不必要的空格和换行符的情况下序列化XML? (。净)

时间:2009-07-16 17:23:57

标签: .net xml xml-serialization

我正在使用XmlSerializer.Serialize,它会产生换行符和不必要的空格。如何避免呢?

3 个答案:

答案 0 :(得分:21)

也许您可以使用重载接受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);
    }
}

答案 1 :(得分:2)

有趣的是,我认为默认情况下没有格式化。我只是尝试了以下内容并且没有格式化:

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>

答案 2 :(得分:0)

还请检查序列化类是否包含XML类型的成员(如XmlElement)。我使用Xsd2Code工具从XSD生成类,并且(在非常特殊的情况下)它创建了一个XmlElement类型的成员。在序列化期间,该成员具有自己的格式(确切地说是标识)。即使我打开(或关闭)XmlSerializer缩进,它也不会影响XmlElement成员。