オブジェクトをファイルに保存するには、次の方法があります。
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
私はそれを書いていないと告白します (型パラメータを取る拡張メソッドに変換しただけです)。
今、XML をファイルに保存するのではなく、文字列として返す必要があります。調べていますが、まだわかりません。
これらのオブジェクトに精通している人にとっては、これは本当に簡単かもしれないと思いました。そうでなくても、最終的には理解できるようになります。
ベストアンサー1
使うStringWriter
代わりにStreamWriter
:
public static string SerializeObject<T>(this T toSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
using(StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
}
toSerialize.GetType()
XmlSerializer コンストラクタでは、 の代わりにを使用することが重要ですtypeof(T)
。前者を使用すると、コードは のすべての可能なサブクラスT
( メソッドに有効) をカバーしますが、後者を使用すると、 から派生した型を渡すときに失敗します。 が使用されるとがスローされるT
このステートメントの根拠となるサンプル コードへのリンクを次に示します。これは、派生型のインスタンスを、派生型の基本クラスで定義されている SerializeObject を呼び出すメソッドに渡すためです。XmlSerializer
Exception
typeof(T)
http://ideone.com/1Z5J1。
また、Ideone はコードの実行に Mono を使用します。Microsoft .NET ランタイムを使用した場合の実際の結果はIdeone に表示されるものとはException
異なりますMessage
が、やはり失敗します。