2010-09-03 7 views
1

Minoccurs est 0 dans XSD et Nillable est vrai pour un élément. Mais si je ne mets pas la valeur de l'élément, il la prend comme nulle et l'enregistrement est effacé sur le serveurComment omettre un élément XML dans C# XML généré à partir de XSD?

Existe-t-il un moyen de lui dire d'omettre l'élément du XML de sortie quand certaines conditions sont satisfaites mais l'ont pour d'autres cas?

<xs:element name='CLS_CD' minOccurs='0' nillable='true' type='xdv:stringLen20'/> 
+0

Postez votre code/contexte, s'il vous plaît. –

Répondre

2

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>