gpt4 book ai didi

c# - Xml 反序列化和默认值

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:13 25 4
gpt4 key购买 nike

我有一个包含模板(默认值)和指定字段的非标准 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 .类(class) SubClassSpecific都派生自同一个母类。

什么是 ISpecific 我想找到默认值(即在 SubClass 中找到的值),除非给出了一个字段。到目前为止,我所做的是实现一种方法,该方法通过反射检查类的属性是否为 Specific。具有属性类型的默认值,并将其替换为SubClass的属性如果是这样的话。它工作得很好,但我没有涵盖所有情况。例如,假设我有一个 double 属性的值 Par1SubClass ,说 Par1 = 1.234 , 但我希望现在是 0 .问题是 0是 double 类型的默认值,因此使用我的方法我将检索 SubClass 中的属性值.

最好的办法是反序列化 MyClass首先是对象,然后是类的所有属性 SpecificSubClass 中相同属性的值,然后再次反序列化到这个现有对象中,这将仅更改 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>

最佳答案

这里是一系列用于序列化的 CodeProject 链接,可能会有用:

虽然我不确定我理解你的问题,但你能不能让你的类可序列化,并在 MyClass 示例中,为适当的值编写序列化代码?

关于c# - Xml 反序列化和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com