Utilisation du DataContractSerializer Pour sérialiser mon objet, je reçois une sortie similaire à y a-t-il un moyen de sortir des balises qui ne sont que P> <Id>
<Name>
4 Réponses :
Le Donc, le meilleur que vous puissiez faire est de marquer votre classe avec un Le DatacontractSerializer ne permet pas vraiment beaucoup plus de contrôle que cela - vous pouvez définir assez clairement (à l'aide de cette approche «opt-in« opt-in »explicite) Mais avez-vous vraiment besoin de cela? Vraiment? P>
Si tel est le cas, vous devrez probablement utiliser le XMLSerializer pour ce processus de sérialisation à la place - là, vous pouvez obtenir plus de contrôle sur comment strong> choses sont sérialisées (mais comme un inconvénient, le XMLSerializer sera sérialisé tous les Propriété publique non explicitement marquée d'un Découvrez dan rigsby's Poste de blog sur les différences entre DatacontractSerializer et XMLSerializer et ce que chacun a à offrir. P> DatacontractSerializer CODE> Serialisera toutes les propriétés publiques (si vous ne spécifiez rien - possible à partir de .NET 3.5 SP1) ou (l'approche que je préfère) tout ce que vous étiquetez avec un [Datamember ] attribut. p>
[Datacontract] code> attribut et tous les membres (propriétés, champs, etc.) que vous voulez vraiment dans votre contrat de données avec un < code> [Datamember] code> attribut. p>
[xmlignore] code> attribut - un schéma "Opt-out"). P>
Je souhaite que c'est sérialiser toutes les propriétés, XMLSerializer n'est même pas une option puisque mon objet a une iliste dedans. Je posais des questions sur le schéma de dénomination car il serait plus facile dans mon docs de transformation si les propriétés correspondaient exactement à mes objets de classe.
Avez-vous décoré votre classe et vos propriétés avec des attributs [Datamember]? Vous pouvez définir un nom avec ceux: [Datamember (nom = "xyz")] - Est-ce que cela aide dans votre cas?
Avez-vous décoré les classes qui se retrouveront dans votre IList avec l'attribut [Datacontract] et [Datamember]? Il semble presque comme si tu ne l'as pas ...
CORRECT, je n'ai utilisé aucun des attributs qui est ce que toute ma question est pivotale, je refuse de polluer mon modèle de domaine pour la présentation, c'est pourquoi je serai sérialisé à XML pour faire des transformations XSLT pour la génération de documents.
Les noms d'éléments longs (tels que: _x003c_created_x003e_k__backingfield) sont créés par .NET lorsque vous utilisez des autoproperties. P>
Si vous les avez changées en propriétés avec des champs de support, ils utilisent plutôt vos noms de champ de support. Vous pouvez le faire sans ajouter aucun attributs à votre code. P>
(au-delà de cela, il suffit d'ajouter un attribut [Datacontract] à votre définition de classe rangera beaucoup votre XML - bien que pas complètement.) p>
Je vais devoir vérifier quelle différence qui fait, je peux accepter de placer un attribut au niveau de la classe, en particulier depuis que ces classes sont des données de données, même si elles ne sont pas exposées par WCF
Je suis intéressé par votre expérience. La sérialisation semble mal définie et souffre de plusieurs solutions.
J'ai rencontré le même problème, enfin, il vous suffit d'ajouter [DataContract] 和 [Datamember] au modèle. P>
Cette réponse a été automatiquement marquée comme de la qualité médiocre en raison de sa longueur et de sa teneur. Brevity est acceptable, mais des explications plus complètes sont meilleures.
Ceci se produit car vous devez avoir marqué vos types (par exemple, Le moyen le plus simple de résoudre ce problème est de supprimer l'attribut agentNotification code>) avec
[sérialisable] code>
. Lorsque DatacontractSerializer Code> rencontre un type marqué avec
[sérialisable] code> mais pas explicite
[Datacontract] code>
, il génère un contrat par défaut pour le type qui correspond à comment Binarinformatter code> a> Serialise une classe, qui consiste à sérialiser Tous Variables des membres d'une classe - même variables marquées comme privées - par nom. Pour Propriétés mises en œuvre automatiquement , cela signifie que le Champs de support secrets Sérialisés par nom; Leurs noms sont les noms d'éléments particuliers que vous voyez. p>
[sérialisable] code> de vos classes. Vous n'en avez presque certainement pas besoin, à moins que vous n'utilisiez réellement
Binarinformatter code> ou
SOAPPORTER code>
. L'avoir fait, DatacontractSerializer code> Serialisera désormais vos propriétés et champs publics par nom, plutôt que des champs publics et privés par nom. P>
Cela aurait probablement été ce que je voulais il y a 6 ans. Mais à un moment donné, je viens d'arrêter d'utiliser XSLT et de commencer à utiliser Postal + Razorviewengine pour générer du contenu par courrier électronique.
N ° et arrêtez de vous inquiéter de la façon dont votre XML looke. Cela ne conduit que de chagrin.
Vous devriez faire une réponse.