2011-03-24 3 views
16

Lors de l'utilisation des paramètres par défaut avec XmlSerializer, le XML sera généré en tant que valeur formalisée.Empêcher XmlSerializer de mettre en forme la sortie

IE: quelque chose le long de ces lignes.

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Stock> 
    <ProductCode>12345</ProductCode> 
    <ProductPrice>10.32</ProductPrice> 
    </Stock> 
    <Stock> 
    <ProductCode>45632</ProductCode> 
    <ProductPrice>5.43</ProductPrice> 
    </Stock> 
</ArrayOfStock> 

Comment peut-on éviter tout type de mise en forme sur la sortie? Donc ce que je cherche à réaliser est ceci.

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Stock> 
     <ProductCode>123456</ProductCode> 
     <ProductPrice>10.57</ProductPrice> 
    </Stock> 
    <Stock> 
     <ProductCode>789123</ProductCode> 
     <ProductPrice>133.22</ProductPrice> 
    </Stock> 
</ArrayOfStock> 

EDIT: Le code complet de ma méthode est

public static String Serialize(Stock stock) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(Stock)); 

    using (StringWriter stringWriter = new StringWriter()) 
    { 
     serializer.Serialize(stringWriter, stock); 
     return stringWriter.ToString(); 
    }    
} 
+0

Pourquoi le formatage est-il important? Est-ce que cela cause un problème? –

Répondre

22

Avez-vous essayé ceci:

var serializer = new XmlSerializer(typeof(MyClass)); 

using (var writer = new StreamWriter("file.path")) 
using (var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings { Indent = false })) 
{ 
    serializer.Serialize(xmlWriter, myObject); 
} 

Vous pouvez explorer d'autres options sur XmlWriterSettings.

+0

Cheers, a travaillé un charme! –

+2

Je pense que l'indentation est fausse par défaut parce que j'avais le même code que le vôtre (sans paramètres) et que je voulais le mettre en forme, donc j'ai dû changer de retrait à vrai. – sluki

+0

Oui, Indent est faux par défaut sur 'XmlWritterSettings' donc je suppose qu'il peut être omis du code ci-dessus. Mais si vous utilisez le 'XmlSerializer' sans lui donner explicitement un' XmlWriter', il utilisera le sien et activera le formatage/indentation par défaut. –

0

..

XmlSerializer xmlser = new XmlSerializer(...); 

XmlWriterSettings settings = new XmlWriterSettings {Indent = false}; 

using (XmlWriter xw = XmlWriter.Create(stream, settings)) 
{ 

...

0

Il est simple d'analyser le XML résultant et de supprimer et de nouvelles lignes et onglets ...
en utilisant 'Indent = false', mettra encore des éléments sur les nouvelles lignes non?

+0

Ok, il semble que l'option Indent contrôle plus que juste indenting ... mal nommé peut-être? –

Questions connexes