human
J'ai la méthode suivante pour enregistrer un objet dans un fichier :
```// Enregistrer un objet sur le disque
public static void SerializeObject(this T toSerialize, String filename)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    TextWriter textWriter = new StreamWriter(filename);
    xmlSerializer.Serialize(textWriter, toSerialize);
    textWriter.Close();
}
```
Je confesse que je ne l'ai pas écrit (je l'ai seulement converti en une méthode d'extension qui prend un paramètre de type).
Maintenant, j'ai besoin qu'il me renvoie le XML sous forme de chaîne (au lieu de l'enregistrer dans un fichier)
gpt
Utilisez un `StringWriter` à la place d'un `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();
    }
}
```

Notez qu'il est important d'utiliser `toSerialize.GetType()` au lieu de `typeof(T)` dans le constructeur XmlSerializer : si vous utilisez le premier, le code couvre toutes les sous-classes possibles de `T` (qui sont valides pour la méthode), tandis que l'utilisation du second échouera lors du passage d'un type dérivé de `T`. Il y a un exemple de code sur Ideone qui motive cette affirmation, avec XmlSerializer lançant une `Exception` lorsque `typeof(T)` est utilisé, car vous passez une instance d'un type dérivé à une méthode qui appelle SerializeObject qui est définie dans la classe de base du type dérivé.

De plus, Ideone utilise Mono pour exécuter le code ; l'`Exception` réelle que vous obtiendriez en utilisant l'exécution .NET de Microsoft a un `Message` différent de celui affiché sur Ideone, mais elle échoue de la même manière.