J'ai une classe comme mais cela sérialise la valeur du bool sur false lorsque l'attribut n'est pas présent dans le XML.
Lorsque l'attribut n'est pas dans le XML, je veux que la propriété soit nulle. P> donc j'ai essayé ce p> mais alors les erreurs de sérialisation p > Type t = Type.GetType("Assembly.NameSpace.MyClass");
XmlSerializer mySerializer = new XmlSerializer(t); //error "There was an error reflecting type"
4 Réponses :
Le problème est qu'un type raison est lorsque la valeur est null, elle peut être représentée comme < Code> regarder cet extrait: P> et: p> sortie: p>
Merci, mais c'est l'attribut dans le XML que je reçois, je ne peux pas contrôler cela. Y a-t-il un moyen d'avoir un attribut Bool nullable?
Vous devez utiliser le modèle de champ "* spécifié" pour contrôler ceci (voir "Contrôler XML généré XML" sur MSDN ):
[Serializable] public class MyClass { [XmlAttribute] public bool myBool { get; set; } [XmlIgnore] public bool myBoolSpecified; }
! myBoolSpecified code>, puis mybool code> est logiquement null code> li>
- d'autres utilise le
true code> ou false code> de mybool code> li>
ul> p>
@Aliostad: J'apprécie les mérites de votre approche, mais si la structure XML n'est pas ouverte à la modification, cela ne fonctionnera pas pendant que celui-ci le fera.
Cela semble super mais ne semble pas fonctionner. Est le "{} spécifié" un nom magique? Ai-je besoin d'une certaine logique dans le getter?
@Jules: Oui, c'est un nom magique. Recherchez "Le modèle est créé dans le formulaire de biensNamesPeecified" sur la page liée. Si cela ne fonctionne pas, veuillez indiquer votre code actuel.
J'ai un problème avec ça. Tandis que cela laisse l'attribut lors de la désérialisation, cela ne sérialiste pas la propriété à un attribut lorsque la propriété a une valeur. J'ai besoin de la solution pour travailler dans les deux sens.
@Jules: Je ne suis pas sûr de ce que tu veux dire. Quelle est la valeur de la propriété et du champ lorsque vous serialisez-vous?
J'ai aussi un vrai problème avec cela. C'est une majeure dans le sérieliseur. Nous pouvons donc sérialiser des entiers nullables, mais nous ne pouvons pas sérialiser les nullables bools? Folie.
regarder Ce pour des informations sur le traitement des champs nullables et des attributs XML. Il y a une similaire Question ici trop. Fondamentalement, le sérialiseur ne peut pas gérer un champ d'attribut XML défini comme nullable, mais il y a une solution autour de la valeur.
Ie 2 propriétés, une qui contient la nullable (non stockée XML) et l'autre utilisée dans la lecture / l'écriture (Attribut XML stocké sous forme de chaîne). Cela pourrait peut-être être ce dont vous avez besoin? P>
private bool? _myBool; [XmlIgnore] public bool? MyBool { get { return _myBool; } set { _myBool = value; } } [XmlAttribute("MyBool")] public string MyBoolstring { get { return MyBool.HasValue ? XmlConvert.ToString(MyBool.Value) : string.Empty; } set { MyBool = !string.IsNullOrEmpty(value) ? XmlConvert.ToBoolean(value) : (bool?)null; } }
Vous pouvez utiliser xmelementattribute. Islamllable strong>:
Qui n'est ponctuable que lorsque vous pouvez choisir de sérialiser en tant qu'élément, au lieu d'un attribut