Как сериализовать XML без лишних пробелов и разрывов строк? (.СЕТЬ) - PullRequest
11 голосов
/ 16 июля 2009

Я использую XmlSerializer.Serialize , и он производит разрывы строк и ненужные пробелы. Как этого избежать?

Ответы [ 3 ]

22 голосов
/ 16 июля 2009

Возможно, вы могли бы использовать перегрузку, принимающую XmlWriter, и настроить данный XmlWriter с экземпляром XmlWriterSettings?

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);
    }
}
2 голосов
/ 16 июля 2009

Интересно, я думал, что по умолчанию форматирования не было. Я просто попробовал следующее и не получил форматирование:

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>
0 голосов
/ 08 августа 2016

Пожалуйста, также проверьте, содержат ли сериализованные классы элементы типа XML (например, XmlElement). Я использовал инструмент Xsd2Code для генерации классов из XSD и (в очень особом случае) создал элемент типа XmlElement. Во время сериализации этот элемент имел свое собственное форматирование (точнее, обозначение). Даже если я включил (или выключил) отступ XmlSerializer, он не оказал влияния на элемент XmlElement.

...