如何使xmlserializer仅序列化普通xml?

Grz*_*nio 75 .net c# xml-serialization xml-declaration

我需要得到简单的xml,而不是<?xml version="1.0" encoding="utf-16"?>在开头和xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"第一个元素中XmlSerializer.我该怎么做?

小智 183

把这一切放在一起 - 这对我来说非常有用:

    // To Clean XML
    public string SerializeToString<T>(T value)
    {
        var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        var serializer = new XmlSerializer(value.GetType());
        var settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;

        using (var stream = new StringWriter())
        using (var writer = XmlWriter.Create(stream, settings))
        {
            serializer.Serialize(writer, value, emptyNamespaces);
            return stream.ToString();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • using (var stream = new StringWriter()) 可以改为 var stream = new StringWriter(); 代码分析出现错误,因为它需要两次处理 xmlwriter。 (2认同)

小智 23

使用XmlSerializer.Serialize方法重载,您可以指定自定义命名空间并将其传递给此.

var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
Run Code Online (Sandbox Code Playgroud)

传递null或空数组将无法解决问题

  • 请注意,您需要将此答案与@ tobsen的答案结合起来,以获得我所要求的内容 - 一个非常干净的xml! (6认同)

tob*_*sen 14

您可以使用XmlWriterSettings并将属性OmitXmlDeclaration设置为true,如msdn中所述.然后使用XmlSerializer.Serialize(xmlWriter,objectToSerialize) ,如此处所述.