2009-04-07 10 views
0

Retour dans les jours de 2.0 sérialisation je pourrais créer une version sérialisée d'un objet qui résulterait dans l'exemple suivant:WCF sérialisation XML

<transactionMessage messageDate="1/1/2001 11:00PM" messageId="abc123"> 
    <transaction property1="Value" property2="value2" /> 
</transactionMessage> 

je referais ce avec le Serializable() attribut puis annexant Attributs XmlElement à mes éléments. Quand j'utilise DataContract/DataMember attributs bien, je reçois quelque chose qui ressemble à ceci:

<transactionMessage> 
    <messageDate>1/1/2001 11:00PM</messageDate> 
    <messageId>abc123</mesageId> 
    <transaction> 
    <property1>Value</property1> 
    <property2>Valu2</property2> 
    </transaction> 
</transactionMessage> 

Ordinairement je ne serais pas vraiment à coeur le code XML généré dans les coulisses, mais ce système sera avec plusieurs clients interfacé externes qui parle déjà à un système différent (basé sur le style de sérialisation 2.0) et je veux garder la structure similaire mais apporter les améliorations supplémentaires de WCF.

Comment puis-je dire à l'attribut DataMember de rendre le formatage plus proche du premier exemple avec des attributs plutôt que des éléments pour tout?

Répondre

2

Le sérialiseur DataContract a été optimisé pour la vitesse, et il semble que le concepteur ait décidé que les attributs de support sur les nœuds XML n'étaient pas adaptés à leurs besoins de vitesse.

Le sérialiseur DataContract ne prend pas en charge les attributs. Si vous en avez besoin, utilisez plutôt le vénérable XmlSerializer.

Marc

+0

Sonne bien. Je suis sûr que les gens qui interagissent vont se plaindre un peu, mais ils peuvent s'en remettre! Merci pour l'aide. – RubyHaus

0

Je ne suis pas en utilisant WCF, mais essayez d'ajouter

[XmlAttribute] 

avant messageDate et les propriétés messageid.