12
votes

Comment sérialiser un XML sans espaces inutiles et pauses de ligne? (.RAPPORTER)


1 commentaires

Vieux, mais je crois que la différence est de savoir si vous utilisez un xmlwriter ou un texturière. D'après mon expérience, XMLWriter par défaut n'est pas un formatage. Cela a du sens, car il sait qu'il écrit un document où le formatage n'a pas d'importance, alors qu'un écrivain de texte écrit du texte droit.


3 Réponses :


23
votes

Peut-être que vous pourriez peut-être utiliser la surcharge acceptant un xmlwriter code> et configurer l'indicateur xmlwriter code> avec un xmlwrittersettings code> instance?

xmlwrittersettings vous permet de contrôler la Application de ruptures de ligne et d'indentation. P>

void Serialize(Object o)
{
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = false;
    settings.NewLineHandling = NewLineHandling.None;
    //settings.OtherProperties = values;

    using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings))
    {
        _serializer.Serialize(writer, o);
    }
}


1 commentaires

J'ai dû changer les paramètres comme ceci: sériializer.Serialize (écrivain, de); . Créer une solution, merci!



2
votes

C'est intéressant, je pensais qu'il n'y avait pas de formatage par défaut. Je viens d'essayer ce qui suit et n'avait pas de formatage: xxx

dans un échantillon exécuté, il a renvoyé le XML suivant: xxx


3 commentaires

Une telle incohérence doit être signalée à Microsoft. Une méthode ne peut pas se comporter de différentes manières. C'est dépendant de la culture? Ou c'est une version / service .NET? Je ne sais pas encore.


Si vous avez une chance, courez le code que j'ai posté. Je cours .net 3.5 SP1. Voyons quelle est la vraie différence.


Votre code n'avait pas de blancheur à .NET 4.5. Mais mon autre mise en œuvre a fait, et cela faisait passer une instance StringWriter dans le premier paramètre de Serialize Call.



0
votes

Veuillez également vérifier si des classes sérialisées contiennent des membres de type XML (comme xmlelement). J'ai utilisé l'outil XSD2Code pour générer des cours de XSD et (dans un cas très spécial), il a créé un membre de type XMLElement. Pendant la sérialisation, ce membre avait son propre formatage (l'identification étant exacte). Même si j'avais allumé (ou éteint) indentation XMLSerializer, il n'avait aucune incidence sur le membre XMLElement.


0 commentaires