2017-05-07 212 views
0

我有一個類有兩個屬性(它們是從xsd使用xsd.exe生成的)並填充它們並嘗試使用下面的代碼將它們序列化爲xml。使用XMLSerializer序列化類不顯示字段C#

我能得到XML在它的元素,但沒有其字段/我已分配

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(); 

而導致的XML是

<?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> 

這沒有一個元素我已經設置了字段。

+0

你必須爲你的財產'提供一個值DataLimited' 。我希望'IsDataLimitedSet'是用'XmlIgnore'裝飾的,以防止它出現。 – rene

+0

@rene yep我剛剛發現,但爲什麼這個System.Xml.Serialization.XmlIgnoreAttribute()註解被添加了任何線索? – sudhir

+0

是的,對於具有xsi:nil =「true」或具有minoccurs = 0且映射到類中的非null類型的元素,會添加IIRC。在反序列化期間,根據元素是否存在於有效負載中,不可爲空類型將具有其默認值,無論Is [NameofProperty]集合是true還是false。 – rene

回答

-1

您需要填寫包含數據的字段。序列化器忽略所有未填充的字段。

0

正如評論討論的,當我們有minOccurs=0的元素,我們得到註解System.Xml.Serialization.XmlIgnoreAttribute()由於這甚至填補了實體之後,我們看不到屬性

解決方案: 領域具有屬性的minOccurs = 0時運行XSD .EXE 兩個屬性是在類產生的每個元件,一個是屬性和另一個爲屬性與後綴值出現在XML序列化的同時,我們需要啓用指定屬性「指定的」

所以bool值那個元素是

如: 正如我擁有財產性IsDataLimitedSet還有一個名爲IsDataLimitedSetSpecified類產生一個更多的財產,所以我們需要把它設置爲true

OrganizationDetail objOrgDet = new OrganizationDetail(); 
objOrg.IsDataLimitedSetSpecified =true; 
objOrg.IsDataLimitedSet =true; 
相關問題