繁体   English   中英

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

[英]How to serialize a XML without unnecessary spaces and line breaks? (.NET)

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

也许你可以使用过载受理XmlWriter ,并配置给定XmlWriterXmlWriterSettings实例?

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);
    }
}

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

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成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM