web-dev-qa-db-ja.com

xmlserializerでプレーンxmlのみをシリアル化するにはどうすればよいですか?

最初の<?xml version="1.0" encoding="utf-16"?>XmlSerializerの最初の要素にxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"のないプレーンなxmlを取得する必要があります。どうすればいいですか?

72
Grzenio

これをすべてまとめると、これは私にとって完璧に機能します:

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

使用 XmlSerializer.Serializeメソッドオーバーロード。カスタムネームスペースを指定して、そこに渡すことができます。

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

nullまたは空の配列を渡してもうまくいかない

21
kossib

XmlWriterSettingsを使用し、プロパティOmitXmlDeclarationをtrueに設定できます- msdnで説明 。次に、XmlSerializer.Serialize(xmlWriter、objectToSerialize)ここで説明 を使用します。

14
tobsen

これにより、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); 
}
0
Keith Aymar