我有一个包含模板(默认值)和指定字段的非标准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