Empêcher la fermeture automatique des balises dans XmlSerializer lorsque aucune donnée n'est présente
Quand je sérialiser la valeur : Si aucune valeur n'est présente dans les données, puis ça vient comme ci-dessous au format.
<Note>
<Type>Acknowledged by PPS</Type>
<Data />
</Note>
Mais ce que je veux de données xml dans le format ci-dessous:
<Note>
<Type>Acknowledged by PPS</Type>
<Data></Data>
</Note>
Code Pour ce que j'ai écrit :
[Serializable]
public class Notes
{
[XmlElement("Type")]
public string typeName { get; set; }
[XmlElement("Data")]
public string dataValue { get; set; }
}
Je ne suis pas en mesure de comprendre ce qu'il faut faire pour obtenir les données dans le format ci-dessous si les données n pas attribuer une valeur quelconque.
<Note>
<Type>Acknowledged by PPS</Type>
<Data></Data>
</Note>
Alors que je ne suis pas sûr de savoir pourquoi vous voulez le faire, notez que le fichier xml que vous avez écrit est en fait pas valide. Vous n'avez jamais fermer l'élément de Données.
Si j'utilise ce alors [XmlElementAttribute(IsNullable = false)] <Données></Données> ignorer complètement que je ne veux pas
Le temps où la différence entre <Données/> et <Données></Données> en fait, les questions sont de petite taille, généralement directement liée à incomplète/buggy implémentations. Pourquoi voulez-vous faire?
Parce que je suis en train de faire une opération si il n'y a aucun élément trouvé dans les <Données></Données> valeur
Vous devriez lire ma réponse à cette question et l'appliquer à Votre situation.
Si j'utilise ce alors [XmlElementAttribute(IsNullable = false)] <Données></Données> ignorer complètement que je ne veux pas
Le temps où la différence entre <Données/> et <Données></Données> en fait, les questions sont de petite taille, généralement directement liée à incomplète/buggy implémentations. Pourquoi voulez-vous faire?
Parce que je suis en train de faire une opération si il n'y a aucun élément trouvé dans les <Données></Données> valeur
Vous devriez lire ma réponse à cette question et l'appliquer à Votre situation.
OriginalL'auteur Nishant Kumar | 2012-11-24
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en créant votre propre XmlTextWriter à passer dans le processus de sérialisation.
Vous pouvez tester le résultat en utilisant:
null -> ""
quand sérialisé/désérialisé.Fonctionne, mais le XML est généré sans saut de ligne après chaque élément 🙁
Vous avez besoin de s'enrouler autour d'un
XmlWriter
. Le sous-jacentXmlWriter
besoinsXmlWriterSettings
avecIndent
ensemble detrue
etNewLineChars
quelque chose de sensible. Exemple: pastebin.com/G2bZNQnQ (fonctionne aussi avecStream
au lieu deTextWriter
)triste, mais ne marche pas... 🙁
Il a un sac sur le mode de Retrait. Cette stackoverflow.com/a/40423636/4594225 c'est de travailler pour moi.
OriginalL'auteur armen.shimoon
De l'OMI, ce n'est pas possibe de générer votre choix XML à l'aide de
Serialization
. Mais, vous pouvez utiliserLINQ to XML
pour générer le schéma souhaité, cePrise principale est
in case your value is null, you should set it to empty string
. Ilforce the closing tag to be generated
. Dans le cas où la valeur est null balise de fermeture n'est pas créé.OriginalL'auteur Rohit Vats
Bidouille temps - voir Générer Du Système.Xml.XmlDocument.OuterXml() de sortie c'est valide en HTML
Au fond après XML doc a été généré aller à travers chaque nœud, l'ajout d'un texte vide nœud si pas d'enfants
(Oui, je sais que vous ne devriez pas avoir à le faire - mais si votre envoi le fichier XML en un autre système que vous ne pouvez pas résoudre facilement être pragmatique des choses)
if (node.HasChildNodes)
àif (node.HasChildNodes && node.NodeType != XmlNodeType.Text)
OriginalL'auteur Ryan
Vous pouvez ajouter un mannequin terrain pour empêcher l'auto-élément de fermeture.
Ou si vous voulez le code de votre classe, Votre classe doit être comme cela.
OriginalL'auteur FAHID