Lors de l'utilisation d'un sérialiseur .NET Xml standard, existe-t-il un moyen de masquer toutes les valeurs nulles? Le ci-dessous est un exemple de la sortie de ma classe. Je ne veux pas afficher les entiers Nullable s'ils sont définis sur Null.
Sortie Xml actuelle:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
<myOtherInt>-1</myOtherInt>
</myClass>
Ce que je veux:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myOtherInt>-1</myOtherInt>
</myClass>
c#
.net
xml-serialization
GuruMéditation
la source
la source
En plus de ce que Chris Taylor a écrit: si vous avez un élément sérialisé en tant qu'attribut, vous pouvez avoir une propriété sur votre classe nommée
{PropertyName}Specified
pour contrôler si elle doit être sérialisée. Dans du code:la source
{PropertyName}Specified
attributs doivent être de type bool.Il existe une propriété appelée
XmlElementAttribute.IsNullable
Si la propriété IsNullable est définie sur true, l'attribut xsi: nil est généré pour les membres de classe qui ont été définis sur une référence nulle.
L'exemple suivant montre un champ auquel est
XmlElementAttribute
appliqué et la propriété IsNullable définie sur false.Vous pouvez consulter les autres
XmlElementAttribute
pour changer les noms lors de la sérialisation, etc.la source
Vous pouvez définir certaines valeurs par défaut et cela empêche les champs d'être sérialisés.
la source
Je préfère créer mon propre XML sans balises générées automatiquement. En cela, je peux ignorer la création des nœuds avec des valeurs nulles:
la source
la source
Dans mon cas, les variables / éléments Nullable étaient tous de type String. Donc, j'ai simplement effectué une vérification et leur ai assigné une chaîne. Vide en cas de NULL. De cette façon, je me suis débarrassé des attributs inutiles nil et xmlns (p3: nil = "true" xmlns: p3 = "http://www.w3.org/2001/XMLSchema-instance)
la source