关于我的另一个问题:XML反序列化空元素?
我从第三方API服务器上获得了这些元素,用于API测试:
编辑:
在我提出的例子中,这两个元素显然应该是null而不是空元素。XML并没有真正的null概念,但这些元素可以被省略(如果它们为null,则不要将它们放入XML)或使用@svick所提到的更好的表示方法。或在其他情况下,当它们有意义时应该使用空元素。但不适用于Decimal或Boolean。
<Taxable />
<DefaultPurchasePrice />
我刚意识到自己对于像那样的元素到底代表空对象还是空的概念已经混淆了。
说到对象,它们是一样的,null object通常表示空对象引用,对吧?但是当尝试将XML元素映射到数据字段/值时,它们可能是不同的,即null字符串是空字符串,但对于十进制价格或布尔值,它们是未定义的,等同于空,但不会为null,除非它们被定义为可为空。
同样,我的XmlSerializer的问题在于无法处理转移像那样的空元素。我能否轻松地在我的代码中修复它?还是应该要求人们提供具有明确定义的XML?因为似乎像那样的空XML元素是未定义的:它在这里,但是对于XML元素本身来说,它可以是null或空无所谓?但对于该元素,我的代码需要弄清如何处理,除非我将所有C#类数据字段设置为字符串类型。否则,如果我的代码尝试直接将空或null XML元素映射到某个数据字段,那肯定会失败。
我必须问这个问题,因为我遇到了XML中有很多这些元素,对于那些特殊的元素,我的.NET XML序列化代码需要将那些字段映射为字符串,如果字符串不为空,我就将它们转换为相应的数据类型,否则我将它们设置为null。在进行反序列化之前,我最终删除了那些空元素,因为这样做更容易。但我确实在想:"在我的代码中我到底在做什么?我刚刚删除了空元素还是null元素?因为它们显然是不同的!但编写XML的人认为它们是相同的,因为XML本身没有'null'的概念,有些人认为决定它是否为null或为空是我的责任。但XML确实使你能够以更清晰的方式表示'null'元素。编辑:
在我提出的例子中,这两个元素显然应该是null而不是空元素。XML并没有真正的null概念,但这些元素可以被省略(如果它们为null,则不要将它们放入XML)或使用@svick所提到的更好的表示方法。或在其他情况下,当它们有意义时应该使用空元素。但不适用于Decimal或Boolean。