Comment ignorer un nullable propriété de sérialisation si elle est null ou vide?
J'ai une classe qui est utilisée pour la Sérialisation Xml.
À l'intérieur de laquelle j'ai nullable propriété qui est décoré avec des XmlAttribute:
[XmlAttribute("lastUpdated")]
public DateTime? LastUpdated { get; set; }
Comment ignorer la propriété de la sérialisation si elle est null ou vide?
J'ai essayé de le ci-dessous, mais il n'a pas sérialiser quand il y a une valeur (toujours ignore):
[XmlIgnore]
public DateTime? LastUpdatedValue { get; set; }
[XmlAttribute("lastUpdated")]
public DateTime LastUpdated { get; set; }
public bool ShouldSerializeLastUpdated()
{
return LastUpdatedValue.HasValue;
}
Avez-vous vu ce stackoverflow.com/questions/244953/...
Qu'attendez-vous le XML? Dans ce cas, vous aurez
non, je veux juste ignorer le xmlattribute si elle est null. mais DateTime? n'est pas sérialisable. Comment le remplacer?
Qu'attendez-vous le XML? Dans ce cas, vous aurez
<lastUpdated xsi:nil="true"/>
si la propriété est null; vous pouvez soit en post-traitement de vos xml (plus facile) ou vous pouvez écrire une classe XmlWriter (plus fort, plus performant). Il y a d'autres options qui sont à la fois dur et le ballonnement de votre code.non, je veux juste ignorer le xmlattribute si elle est null. mais DateTime? n'est pas sérialisable. Comment le remplacer?
OriginalL'auteur The Light | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Nullable n'est pas directement pris en charge par XmlSerialization.
Si vous voulez utiliser un nullable propriété, vous devez utiliser un non nullable propriété et ajouter une propriété booléenne avec le même nom de propriété avec le suffixe "Spécifié", qui spécifique lorsque la propriété doit être sérialisable.
Un exemple avec votre cas :
Désolé, j'ai été trop vite, j'ai corriger et modifier mon code. Pouvez-vous essayer cela ?
pouvez-vous accepter ma réponse comme meilleure réponse ?
return (DateTime)_lastUpdated;
va jeterInvalidOperationException
si_lastUpdated
n'est pas une valeur.OriginalL'auteur binard
Je sais que ce sujet est vieux. C'est la solution je suis venu avec. Une classe qui encapsule le type, et a conversion implicite du type. Lors de la sérialisation, la variable de membre peut être marqué avec IsNullable = false sans se faire d'erreurs du compilateur, et il le blocage de l'être sérialisé lorsque la valeur null.
Ensuite l'utiliser dans votre classe
Vous pouvez faire des choses comme
À toutes fins, c'est un int. Pour la sérialisation, il peut être null et bloqué sérialisé.
OriginalL'auteur DDRider62
C'est de travailler pour moi.
OriginalL'auteur Madhu Nadamala
Vous pouvez utiliser XmlElementAttribute.IsNullable:
OriginalL'auteur Yochai Timmer
Remarque: Cela fonctionne pour vous dans la fabrication de SAVON contrats WCF. Je n'ai pas testé dans d'autres sérialisation Xml scénarios.
Lors de l'utilisation d'un
[DataContract]
vous pouvez utiliser[DataMember(EmitDefaultValue = false)]
boolean
il n'émettent que de la valeur si elle esttrue
.nullable boolean
il n'émettent que si elle n'est pasnull
.string
il n'émettent que de la valeur si elle n'est pasnull
.int
il n'émettent que de la valeur si elle n'est pas0
.etc.
Assurez-vous de mettre
[DataContract]
sur la classe elle-même et[DataMember]
sur tous les membres que vous souhaitez sérialisé, si vous êtes en précisantEmitDefaultValue
ou pas.https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.emitdefaultvalue(v=vs. 110).aspx
OriginalL'auteur Simon_Weaver