4 votes

Manque la fin du XML lors de la sérialisation avec DataContractSerializer

J'ai la méthode suivante que j'utilise pour sérialiser divers objets en XML. J'écris ensuite le XML dans un fichier. Tous les objets ont le bon [DataContract] y [DataMember] attributs.

    public static string Serialize<T>(T item)
    {
        var builder = new StringBuilder();
        var serializer = new DataContractSerializer(typeof(T));

        using (var xmlWriter = XmlWriter.Create(builder))
        {
            serializer.WriteObject(xmlWriter, item);
            return builder.ToString();
        }
    }

La sérialisation fonctionne bien, mais il me manque la fin du contenu. En d'autres termes, la chaîne ne contient pas l'intégralité du document XML : la fin est tronquée. Parfois, la chaîne se termine en plein milieu d'une balise.

Il ne semble pas qu'il y ait une longueur maximale de mélange qui poserait un problème : J'ai des chaînes de 18k qui sont incomplètes et j'ai des chaînes de 80k qui sont également incomplètes.

La structure XML est assez simple et ne comporte que 6 à 8 nœuds.

Est-ce que j'ai manqué quelque chose ?

11voto

Marc Gravell Points 482669

xmlWriter n'est pas vidée au moment où vous appelez ToString() ; essayez :

    using (var xmlWriter = XmlWriter.Create(builder))
    {
        serializer.WriteObject(xmlWriter, item);
    }
    return builder.ToString();

Cela fait le ToString() après el Dispose() en xmlWriter ce qui signifie que toutes les données mises en mémoire tampon seront envoyées vers la sortie ( builder dans ce cas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X