2010-08-12 11 views
1

Je voudrais utiliser XmlSerializer et désérialiser des attributs avec des valeurs de chaînes vides dans des zéros pour ints. Toutes les questions que j'ai vues concernant la désérialisation des attributs avec des chaînes vides impliquent la définition d'un nombre d'octets nullable à null - mais je veux définir des entiers non nulles à zéro, et non null.Attribut XmlSerializer deserialize avec une chaîne vide à zéro

Existe-t-il un moyen facile de le faire sans implémenter IXmlSerializable et juste le gérer moi-même?

Répondre

1

Une approche pourrait être de configurer une propriété sérialisable factice, et utiliser une autre propriété dans la pratique:

private int myint; 

[XmlIgnore] 
public int MyInt { get; set; } 

[XmlElement("MyInt")] 
public string MyIntString 
{ 
    get { return this.MyInt.ToString(); } 
    set { this.MyInt = Convert.ToInt32(value ?? string.Empty); } 
} 
+0

Merci pour la réponse. En fait, j'avais déjà essayé la première approche listée ci-dessus mais XmlSerializer lève une exception InvalidOperationException avec le message "Impossible de sérialiser le membre 'MYPROPERTY' de type System.Nullable'1 [System.Int32] .XmlAttribute/XmlText ne peut pas être utilisé pour encoder des types complexes. " Je pourrais juste faire une chaîne de MYPROPERTY et créer une méthode qui essaye de lancer à un int - mais je ne l'avais pas pris jusqu'ici encore parce que je tenais toujours l'espoir pour une approche plus simple. Peut-être que je fais quelque chose d'autre? –

+0

Oh, vous avez raison. Je me suis habitué à WCF, qui gère ces types plus facilement. En arrière dans la journée, ce que je ferais est d'utiliser une propriété dummy comme une chaîne, et l'analyser dans ma propriété réelle. Je mettrai à jour le poste en conséquence. – kbrimington

+0

Super merci! Cela ressemble à l'approche la plus propre. Dommage, il n'y a pas quelque chose comme [XmlAttributeAttribute (EmptyValue = "0")] :) –