2009-09-23 4 views
0

J'utilise LINQ-To-SQL pour la base de données.Comment créer des tags XML personnalisés à l'aide des services Web .net?

Je retourne le contenu xml de mon service Web comme suit:
Le code:

DataClassesDataContext dc = new DataClassesDataContext(); 
[WebMethod] 
    public List<Books> getBooks() 
    { 
     return dc.Books.ToList();  
    } 

sortie:

<ArrayOfBook> 
− 
<Book> 
<bookID>1</bookID> 
<title>Programming with Java</title> 
<author>Balagurusami</author> 
<summary>Summary1</summary> 
</Book> 
− 
<Book> 
<bookID>2</bookID> 
<title>Programming with C</title> 
<author>M.M.Patel</author> 
<summary>Summary2</summary> 
</Book> 
− 
<Book> 
<bookID>3</bookID> 
<title>ASP in 21 Days</title> 
<author>K.J. Malai</author> 
<summary>Summary3</summary> 
</Book> 
− 
<Book> 
<bookID>4</bookID> 
<title>Book Title</title> 
<author>autho1</author> 
<summary>summary4</summary> 
</Book> 
</ArrayOfBook> 

Question:

Comment puis-je mettre des attributs personnalisés & nœuds dans ma sortie?

Répondre

1

Le XML est-il destiné à la consommation humaine? C'est l'un de ces domaines où les développeurs sont coincés dans une ornière - ils ont cette perception de ce à quoi devrait ressembler le XML, et passent d'innombrables heures à se débrouiller avec les attributs et IXmlSerializable pour avoir l'apparence qu'ils veulent. . Après tout ce temps perdu, ils réalisent tristement que leur application ne fonctionne pas différemment de ce qu'elle a fait quand ils ont laissé le framework damner sérialiser leurs classes comme XmlSerializer le voulait.

Conseil: Ne le faites pas. Marchez loin. Travaillez sur quelque chose que vous avez réellement besoin de travailler.

Attendez, vous lisez toujours ceci? Eh bien, devinez que vous devez apprendre en quelque sorte.

Deux options: Implémenter IXmlSerializable ou utiliser des attributs sur vos propriétés. Je vous suggère fortement d'y aller avec l'option deux. Avec l'interface, vous devez construire et analyser le fichier XML vous-même, ce qui est plus difficile que ça en al'air. C'est même avec l'avènement des classes linq to xml (XElement etal). Je l'ai déjà fait et j'ai mangé une semaine de mon temps à régler tel ou tel petit problème.

Les attributs tels que XmlAttribute ou XmlElement sont le chemin le plus rapide pour indiquer au sérialiseur xml comment générer le code XML de votre classe. Il existe certaines situations (comme les propriétés de collection) où vous trouverez difficile de masser le xml en utilisant les attributs comme vous le souhaitez (smirk).

Les attributs sont donc la meilleure option. Malheureusement pour vous, vous êtes en train de sérialiser le code généré par les entités linq à sql. Vous pouvez modifier le code généré pour ajouter les attributs, mais maintenant vous êtes vissé chaque fois que vous devez régénérer. Commencez-vous à avoir l'impression que vous ne devriez pas vous inquiéter de ce à quoi ressemble votre xml? Donc, dans votre cas, vous n'avez pas d'autre choix que d'ajouter partial classes for each of your entities et d'implémenter IXmlSerializable Vous pouvez construire votre xml de différentes façons (en utilisant des classes 2.0, des classes linq vers xml ou en utilisant freaking StringBuilder). Je suggère de se concentrer sur les classes Linq en XML. Si vous voulez vraiment vous abuser de cette façon.

Questions connexes