からの最初の要素<?xml version="1.0" encoding="utf-16"?>
とxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
最初の要素を含まないプレーンなxmlを取得する必要がありXmlSerializer
ます。どうすればいいですか?
回答:
これをすべてまとめると、これは私にとって完璧に機能します:
// 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();
}
}
using( writer )
この質問に見られるように、Disposeを2回実行しても2回目の呼び出しで何も行われないという保証に準拠しないIDispose実装を行う悪意のあるXmlWriter作成者を対象とする可能な解決策には、trycatchとストリームをnullに設定することが含まれます。stackoverflow.com/a/11192524/2144408。
XmlSerializer.Serialize
カスタム名前空間を指定してそこに渡すことができるメソッドoverloadを使用します。
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
nullまたは空の配列を渡しても、トリックは実行されません
これにより、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);
}