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

时间:2009-11-20 17:22:08

标签: c# .net 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的第一个元素{{1}}。我该怎么办?

4 个答案:

答案 0 :(得分:165)

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

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

答案 1 :(得分:21)

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

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

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

答案 2 :(得分:13)

您可以使用 XmlWriterSettings 并将属性 OmitXmlDeclaration 设置为true described in the msdn。然后使用 XmlSerializer.Serialize(xmlWriter,objectToSerialize) as described here

答案 3 :(得分:0)

这会将XML写入文件而不是字符串。对象票据是我正在序列化的对象。

使用的命名空间:

using System.Xml;
using System.Xml.Serialization;

代码:

XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });

XmlSerializer serializer = new XmlSerializer(typeof(ticket));

XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    OmitXmlDeclaration = true
};

using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
    serializer.Serialize(xmlWriter, ticket, emptyNamespaces); 
}