5 votes

Sortie XML personnalisée ?

Jouer avec l'API Web avec Framework 4.0 Je voulais une sortie XML uniquement, et j'ai donc supprimé le formateur JSON de la collection de formateurs. Maintenant, j'aimerais modifier le XML standard que le XMLSerializer produit en sortie :

<?xml version="1.0"?>
-<ArrayOfCategory xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-
  <Category>
    <Id>1</Id>
    <Name>Drink</Name>
  </Category>-
  <Category>
    <Id>2</Id>
    <Name>Snack</Name>
  </Category>
</ArrayOfCategory>

J'aimerais modifier le nœud "Arrayof" pour qu'il dise quelque chose de plus significatif, et j'ai besoin d'ajouter quelques nœuds supplémentaires (avec des informations supplémentaires) au-dessus du nœud "Arrayof".

Existe-t-il un moyen simple d'y parvenir ou dois-je écrire un formateur/sérialiseur personnalisé ?

7voto

Maggie Ying Points 3804

J'aimerais modifier le nœud "Arrayof" pour qu'il dise quelque chose de plus significatif, et j'ai besoin d'ajouter quelques nœuds supplémentaires (avec des informations supplémentaires) au-dessus du nœud "Arrayof".

Si vous souhaitez personnaliser votre XML, vous devez utiliser le XmlSerializer au lieu du DataContractSerializer qui est utilisé par défaut dans le XmlFormatter.

config.Formatters.XmlFormatter.UseXmlSerializer = true;

Vous pouvez ensuite intégrer votre collection de catégories dans une classe et utiliser [XmlRoot], [XmlElement] et [XmlArray] pour personnaliser le nom de l'élément. Voici un exemple :

[XmlRoot(ElementName = "node")]
public class Node
{
    [XmlElement(ElementName= "SomeInfo")]
    public string Node1;

    [XmlElement(ElementName = "OtherInfo")]
    public string Node2;

    [XmlArray("Categories")]
    public List<Category> CatList;
}

Pour plus d'informations, vous pouvez consulter cet article de MSDN : Contrôle de la sérialisation XML à l'aide d'attributs .

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