在 C# 中,当处理包含在 schema 中定义为nillable="true"
and的元素的 XML 时minOccurs="0"
,区分 nil 元素和省略元素的最优雅的解决方案是什么?
用例是这样一种情况,服务接收一个 XML 片段,其中包含表示记录中所有已更改字段的元素,但没有未更改的字段。
例如,当记录从{ a: 1; b: 2; c: 3; }
变为{ a: 1; b: 4; c: null }
时,服务可能会收到:
<change>
<b>4</b>
<c xsi:nil="true" />
</change>
当记录从{ a: 1; b: 2; c: 3; }
(相同){ a: 1; b: 4; c: 3 }
更改为('c' 没有更改)时,服务可能会收到:
<change>
<b>4</b>
</change>
但是,在 C# 中,这两个具有不同含义的片段都映射到一个看起来像{ a: null; b: 4; c: null; }
. 解析 XML 时,有关 c 显式为 nil 或根本不存在的信息会丢失。我们不确定 a 和 b 是否应该设置为 null 或保持不变。
在此示例中,您可能会建议消息应包含所有字段以避免混淆(以及识别正在更改的记录的内容),但我们正在处理有关大量记录的实际消息,其中只需要发送实际是相关的。我们处理的不仅仅是整数字段,而是各种简单和复杂的类型。
我认为 XML 片段相当优雅和清晰,但是在 C# 应用程序中处理它们时,您建议的最优雅和清晰的解决方案是什么?