我有一个包含模板(默认值)和指定字段的非标准 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
是一个类的集合,SubClass
它具有三个参数和一个类的集合Specific
。类SubClass
和Specific
派生自同一个母类。
什么 ISpecific 我想找到默认值(即在 中找到的值SubClass
),除非给出了一个字段。到目前为止,我所做的是实现一个方法,该方法通过反射检查类的属性是否具有属性类型的默认值,如果是这种情况,则将其Specific
替换为属性。SubClass
它工作得很好,但我没有涵盖所有情况。例如,假设我有一个 double 属性的值Par1
,SubClass
比如Par1 = 1.234
,但我希望它是 now 0
。问题是这0
是 double 类型的默认值,因此使用我的方法,我将检索SubClass
.
最好的办法是首先反序列化MyClass
对象,然后将Specific
具有相同属性值的类的所有属性放入 中SubClass
,然后再次反序列化到这个现有对象中,这将只更改 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
有默认值,则取类的值SubClass
。棘手的情况如下
<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>