我有一個包含模板(默認值)和指定字段的非標準XML。作爲一個例子總是歡迎:Xml反序列化和默認值
<MyClass>
<ArrayOfSubClass>
<SubClass>
<Par1>1</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
<ArrayOfSpecific>
<Specific>
<Par1>11</Par1>
</Specific>
</ArrayOfSpecific>
</SubClass>
</ArrayOfSubClass>
</MyClass>
我想這個類MyClass
反序列化爲一個對象。如您所見,MyClass
是類的集合,它有三個參數和一個類Specific
的集合。類和Specific
是從相同的母類派生的。
什麼是特定的我想找到默認值(即在找到的值),除非給出一個字段。我到目前爲止所做的是實現一種方法,通過反射檢查類Specific
的屬性是否具有屬性類型的默認值,如果屬實,則將其替換爲的屬性。它工作得很好,但我沒有涵蓋所有的情況。例如,想象一下中的雙重屬性Par1
的值,例如Par1 = 1.234
,但我希望它現在爲0
。問題是0
是double類型的默認值,所以在我的方法中,我將檢索中的屬性值。
最好將已先反序列化MyClass
對象,然後把類Specific
所有屬性具有相同屬性的的值,然後再反序列化到這個現有的對象,只改變了在給定的屬性XML文件。
這是相當棘手所以,我可以想像,我的問題是不容易理解......
[編輯:]爲了嘗試更加理解,這是我想要的結果,一旦反序列化
<MyClass>
<ArrayOfSubClass>
<SubClass>
<Par1>1</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
<ArrayOfSpecific>
<Specific>
<Par1>11</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
</Specific>
</ArrayOfSpecific>
</SubClass>
</ArrayOfSubClass>
</MyClass>
它是由反射反序列化之後進行,如果Specific
的屬性都有一個默認值,然後走班的價值。棘手的案件是遵循
<MyClass>
<ArrayOfSubClass>
<SubClass>
<Par1>1</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
<ArrayOfSpecific>
<Specific>
<Par1>0</Par1> <----- 0 is the default value of a double
</Specific>
</ArrayOfSpecific>
</SubClass>
</ArrayOfSubClass>
</MyClass>
目前的結果將是
<MyClass>
<ArrayOfSubClass>
<SubClass>
<Par1>1</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
<ArrayOfSpecific>
<Specific>
<Par1>1</Par1> <---- as 0 is the default value of a double, this property is set to the value of the SubClass
<Par2>2</Par2>
<Par3>3</Par3>
</Specific>
</ArrayOfSpecific>
</SubClass>
</ArrayOfSubClass>
</MyClass>
,但我想
<MyClass>
<ArrayOfSubClass>
<SubClass>
<Par1>1</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
<ArrayOfSpecific>
<Specific>
<Par1>0</Par1>
<Par2>2</Par2>
<Par3>3</Par3>
</Specific>
</ArrayOfSpecific>
</SubClass>
</ArrayOfSubClass>
</MyClass>
我得到了那句話失去了:@「問題是,0是double類型的默認值,所以用我的方法,我將檢索子類中的屬性的值。 「 ,你是什麼意思,爲什麼這是一個問題?如果你只是將這個值設置爲零會發生什麼? –
你在做什麼語言?這篇文章的標籤是「c」,但由於你提到的是類和反射,我猜這是別的。 – JLRishe
這是在c#對不起... – GuillaumeA