Si vous utilisez , vous pouvez contrôler si la valeur est émise en incluant une propriété PropertyNameSpecified.
Une autre option consiste à utiliser un motif spécial pour créer un champ booléen reconnu par le XmlSerializer, et pour appliquer le XmlIgnoreAttribute au champ . Le modèle est créé dans la forme de propertyNameSpecified. Pour exemple, s'il y a un champ nommé « MyFirstName » vous aussi créer un champ nommé « MyFirstNameSpecified » qui indique au XmlSerializer si vous souhaitez générer l'élément XML nommé « MyFirstName ».
Par exemple, si vous déclarez la classe comme ceci:
public class Data
{
[XmlIgnore]
public bool CLS_CDSpecified { get; set; }
[XmlElement(IsNullable=true)]
public string CLS_CD { get; set; }
}
Vous pouvez alors sérialiser rien, une valeur explicite nulle ou une valeur réelle:
var serializer = new XmlSerializer(typeof(Data));
var serializesNothing = new Data();
serializesNothing.CLS_CD = null;
serializesNothing.CLS_CDSpecified = false;
serializer.Serialize(Console.Out, serializesNothing);
Console.WriteLine();
Console.WriteLine();
var serializesNil = new Data();
serializesNil.CLS_CD = null;
serializesNil.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesNil);
Console.WriteLine();
Console.WriteLine();
var serializesValue = new Data();
serializesValue.CLS_CD = "value";
serializesValue.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesValue);
Sortie:
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CLS_CD xsi:nil="true" />
</Data>
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CLS_CD>value</CLS_CD>
</Data>
Postez votre code/contexte, s'il vous plaît. –