2017-05-07 1 views
0

J'ai une classe avec deux propriétés (qui sont générés à partir xsd à l'aide xsd.exe) et de les remplir et d'essayer sérialisation XML avec le code ci-dessous.sérialisation une classe en utilisant XMLSerializer ne pas montrer les champs C#

Je suis en mesure d'obtenir xml avec des éléments en elle, mais sans ses champs/éléments que j'ai assigné

OrganizationDetail objOrgDet = new OrganizationDetail(); 
objOrg.IsDataLimitedSet =true; 

Organization objOrg = new Organization(); 
objOrg.Orgainzation_Detail = objOrgDet; 

XmlSerializer serailizer = new XmlSerializer(typeof(Organization)); 
StringWriter strwritter = new StringWriter(); 

serailizer.Serialize(strwritter, objOrg); 
string xml = strwritter.ToString(); 

Et le xml résulté est

<?xml version="1.0" encoding="utf-16"?> 
<Organization xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Organization_DETAIL xmlns="http://www.mismo.org/residential/2009/schemas" /> 
</Organization> 

Cela n'a pas champ que j'ai défini.

+0

Vous devez fournir une valeur pour votre propriété 'DataLimited' . Je m'attends à 'IsDataLimitedSet' être celui qui est décoré avec' XmlIgnore' pour l'empêcher d'apparaître. – rene

+0

@rene yep Je viens de le trouver, mais pourquoi cette annotation System.Xml.Serialization.XmlIgnoreAttribute() est-elle ajoutée? – sudhir

+0

Oui, il est ajouté, IIRC, pour les éléments qui ont un xsi: nil = "true" ou un minoccurs = 0 et qui correspondent à un type non-nul sur votre classe. Lors de la désérialisation, le type non nullable aura sa valeur par défaut, que l'ensemble Is [NameofProperty] soit vrai ou faux, selon que l'élément était présent ou non dans la charge utile. Merci – rene

Répondre

-1

Vous devez remplir les champs avec des données. Le sérialiseur ignore tous les champs qui ne sont pas remplis.

0

Comme indiqué dans les commentaires, quand nous avons minOccurs=0 des éléments nous obtenons l'annotation System.Xml.Serialization.XmlIgnoreAttribute() en raison de laquelle, même après avoir rempli l'entité que nous ne pouvons pas voir la propriété

Solution: Les champs qui ont l'attribut minOccurs = 0 lorsque vous exécutez xsd .exe pour chaque élément deux propriétés sont générées en classe, on est la propriété et une autre est la valeur bool de la propriété avec Suffixe « spécifié »

donc, pour les valeurs à apparaître dans xml tout sérialisation, nous devons permettre aux biens déterminés de cet élément

par exemple: Comme je l'ai bien IsDataLimitedSet il y a aussi une autre propriété nommée IsDataLimitedSetSpecified généré en classe, donc nous avons besoin de le mettre à true

OrganizationDetail objOrgDet = new OrganizationDetail(); 
objOrg.IsDataLimitedSetSpecified =true; 
objOrg.IsDataLimitedSet =true;