À l'aide de XML décorations pour spécifier des valeurs par défaut lors de la sérialisation
J'ai un problème désérialisation XML; le XML fourni par une tierce partie est très longue, donc si aucune valeur n'est définie pour un élément particulier, il offre et de vide de l'élément (par exemple,<element1 />
).
C'est un problème pour certains éléments, par exemple, ceux qui sont destinés à stocker des entiers. J'ai le contrôle sur la troisième partie, afin que je puisse obtenir pour spécifier une valeur par défaut (<myinteger>0</myinteger>
) ou je peux les obtenir à omettre ces éléments entièrement. Ces deux doivent éviter le problème.
Cependant, il peut y avoir des situations dans l'avenir, où nous n'avons pas autant de contrôle - dans ce cas, est-il un moyen de spécifier, peut-être par l'intermédiaire d'une décoration, une valeur par défaut?
[XmlElement("myinteger")=0???]
public int MyInteger
{
get
{
return myInteger;
}
set
{
myInteger= value;
}
}
OriginalL'auteur CJM | 2010-08-16
Vous devez vous connecter pour publier un commentaire.
XmlSerializer
ne soutien[DefaultValue]
, mais il utilise au cours de l' sérialisation. Au cours de désérialisation, il fonctionne tout simplement le constructeur, puis prend les valeurs entrantes et les applique. Une approche commune, alors, est d'utiliser le constructeur (ou champ-initialiseurs):Cependant;
XmlSerializer
'interprétation de ce n'est pas la "fourniture d'un élément vide", mais plutôt "d'omettre l'élément/attribut)". Mêmeint?
ne correspondent pas à "vide". Pour gérer vide éléments, vous devez la traiter comme une chaîne de caractères. Ce qui est laid.Il y a au moins un effet important lors de la désérialisation. Si l'élément est vide, sans Valeur par défaut il y a peut être une erreur d'analyse. Toutefois, avec elle, la code généré va sauter dans le vide de l'élément.
OriginalL'auteur Marc Gravell
La décoration à l'aide de [Valeur par défaut] ne semble pas être la solution complète depuis il ne marche pas toujours. Une autre Solution simple (Peut ne pas être propre)
OriginalL'auteur Rama