オブジェクトを文字列にシリアル化する 質問する

オブジェクトを文字列にシリアル化する 質問する

オブジェクトをファイルに保存するには、次の方法があります。

// 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 を呼び出すメソッドに渡すためです。XmlSerializerExceptiontypeof(T)http://ideone.com/1Z5J1

また、Ideone はコードの実行に Mono を使用します。Microsoft .NET ランタイムを使用した場合の実際の結果はIdeone に表示されるものとはException異なりますMessageが、やはり失敗します。

おすすめ記事