2016-03-22 19 views
2

XmlSerializer.Serialize Methodには、TextWriterXmlWriterを受け入れるオーバーロードがあります。シリアル化(TextWriter、オブジェクト)とシリアル化(XmlWriter、オブジェクト)

私の質問は、以下の2つの過負荷の実用的な違いは何ですか? (TextWriterで)

例1(listList<MyObjectModel>です):

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

using (TextWriter writer = new StreamWriter(savePath)) 
{ 
    serializer.Serialize(writer, list); 
} 

例2(XmlWriterで):

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

using (XmlWriter writer = XmlWriter.Create(savePath)) 
{ 
    serializer.Serialize(writer, list); 
} 

これまでのところ私は気づいたこと:

1)TextWriterは自動的にインデントを実行するようです。

2)両方のデフォルトのエンコーディングはUTF-8です。

+0

'TextWriter'は抽象クラスなので、カスタムビヘイビアが必要な場合は、' XmlWriter.Create'を提供するか、独自のTextWriter実装を使用することができます。 – Abbath

+1

'XmlWriter'サブクラスは、文字列やストリームを他のものに書き出します。たとえば、['XContainer.CreateWriter()'](https://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.createerer%28v=vs.110%29.aspx)では、 'XmlWriter'を使用して、LINQ-to-XML文書または要素に直接シリアル化することができます。同様に、古い 'XmlDocument' APIで[' XPathNavigator.AppendChild() '](https://msdn.microsoft.com/en-us/library/ms163341%28v=vs.110%29.aspx)を使うことができます。 – dbc

+0

@dbc:ありがとう。違いをよりよく理解するのに役立ちました。 –

答えて

1

私はthe source code referenceの違いが見つかりました:要するに

public void Serialize(TextWriter textWriter, object o, XmlSerializerNamespaces namespaces) { 
    XmlTextWriter xmlWriter = new XmlTextWriter(textWriter); 
    xmlWriter.Formatting = Formatting.Indented; 
    xmlWriter.Indentation = 2; 
    Serialize(xmlWriter, o, namespaces); 
} 

を、TextWriter過負荷はボンネットの下にXmlTextWriterを使用して、あなたのための書式を設定します。

関連する問題