gpt4 book ai didi

.net - 是否可以在 .net 中执行 "mixed"XML 序列化?

转载 作者:数据小太阳 更新时间:2023-10-29 02:42:47 25 4
gpt4 key购买 nike

我正在 VB.net 中设计一些包含必须从 XML 加载的数据的复杂类(但如果您愿意,您可以用 C# 编写答案 :P)。显而易见的解决方案当然是设计一个可序列化的类,以便自动执行加载过程。

现在,我的问题如下:XML 结构是固定的,我无法更改它,而且它有一些麻烦,使得序列化变得很痛苦。这是一小段 DTD 的示例,可以更好地解释问题:

<!ELEMENT Relationship ( AttributePairs | AscendCaption | DescendCaption | ErrPreventInsertOrUpdateChild | ErrPreventDeleteParent | ErrPreventUpdateParent |ExtendedProperties |HiddenProperties )* >
<!ATTLIST Relationship

CountAggregates CDATA #IMPLIED
CountReplicates CDATA #IMPLIED
OnParentUpdate (PreventIfChildren|UpdateChildren) #IMPLIED
OnParentDelete (PreventIfChildren|DeleteChildren|NullChildrenForeignKey) #IMPLIED
IsEnforce (True|False) #REQUIRED
OnChildInsertOrUpdate (PreventIfNoParent|InsertParentIfNone) #IMPLIED
ChildRoleName CDATA #IMPLIED
ParentRoleName CDATA #IMPLIED
ParentAttributeGroupInstance CDATA #IMPLIED
ChildAttributeGroupInstance CDATA #IMPLIED

>

<!--Lots of other sutff not needed for this example -->

如您所见,只需声明相应的属性并用 <XmlAttribute()> 修饰它,即可轻松序列化上述所有属性。标签。除了:

IsEnforce(真|假)#REQUIRED

由于 True 和 False 在 xml 中不是有效的 bool 值(由于大写的 T 和 F),序列化过程将失败。

现在......我知道的唯一其他选择是手动实现 IXMLSerializable,我已经为其他类完成了它,并且它有效,但这也意味着我必须“手动”读取每个属性/元素,甚至我可以轻松地使用标签自动序列化的那些。

最后,我的问题是:是否可以混合使用这两种方法?即:使用标签自动序列化,然后手动“介入”并手动读取更“棘手”的值? ( bool 值只是一个例子,假设我想随意手动读取某些属性)

最佳答案

您始终可以创建 bool 类型的 private 字段(或使用 XmlIgnore),然后创建将其公开为 True 的属性/False 并且有一个 setter 可以解析任何东西,比如 T/FTrue/FalseY/N 等。

对于一般情况,您可以创建枚举

关于.net - 是否可以在 .net 中执行 "mixed"XML 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138546/

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