gpt4 book ai didi

c# - 强制 XmlDefaultValue 值的 XML 序列化

转载 作者:行者123 更新时间:2023-12-04 14:33:21 25 4
gpt4 key购买 nike

使用从 XSD 文档生成的 C# 类,我可以创建一个对象,并成功地将其序列化。但是,某些属性定义了 XmlDefaultValue。如果任何对象具有默认值,则在序列化对象时不会创建这些属性。

根据 documentation,这是预期的行为.但这不是我希望它表现的方式。我需要在 XML 文档中生成所有此类属性。
我已经检查了任何可以应用的代码属性,这些属性可能会强制输出它,即使它是默认值,但我找不到类似的东西。

有什么方法可以实现吗?

最佳答案

关于 DataContract 的最后一个答案不是答案。 XSD 是自动生成的,使用类的人无法控制原作者使用的属性。问题是关于基于 XSD 的自动生成的类。

另一个答案也有问题,因为定义了默认值的属性也可能不允许空值(这种情况经常发生)。唯一真正的解决方案是拥有一个序列化程序,您可以在其中告诉它在序列化方面要忽略哪些属性。这一直是当前 XML 序列化程序的一个严重问题,它们根本不允许传入哪些属性以强制序列化。

实际场景:

REST 服务在主体中接受 XML 以更新对象。 XML 具有由其余服务的作者定义的 XSD。剩余服务存储的当前对象设置了非默认值。用户修改 XML 以将其改回默认值...但是放在 REST 帖子正文中的序列化版本跳过了该值并且不包含它,因为它设置为默认值。

真是个泥潭……无法更新值,因为不导出默认值背后的逻辑完全忽略了 XML 可用于更新对象的想法,而不仅仅是基于 XML 创建新对象。我不敢相信这么多年了,还没有人修改 XML 序列化程序来轻松处理这种基本情况。

关于c# - 强制 XmlDefaultValue 值的 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054335/

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