属性的xsd type =“anySimpleType”

时间:2012-02-15 04:11:48

标签: c# xml xsd deserialization

道歉,如果这是一个愚蠢的问题,我到目前为止还没有对xml做过任何事情。

我希望能够将某些xml反序列化为具有类型object属性的类。此属性可以是intguidstring。在xml中,我希望将此属性定义为属性。我原以为我的xsd看起来像这样:

<xsd:complexType name="MyClass">
  <xsd:attribute name="MyProperty" type="xsd:anySimpleType" />
</xsd:complexType>

但是,visual studio intellisense没有列出选项“xsd:anySimpleType”。这是intellisense的一个问题,还是我做了一些内在错误的事情?

2 个答案:

答案 0 :(得分:4)

虽然拥有xs:anySimpleType类型的属性是合法的,但我会避免它并使用xs:string代替。这是因为规范留下了很多关于这样的属性应该如何表现的问题。使用枚举或正则表达式限制它是不可能的,如果你在身份约束中使用它会发生什么,定义非常糟糕。验证与xs:string完全相同,但行为的其他方面是相当奇怪,可能会在实现之间有所不同。

如果您希望稍后定义子类型(如string,int和URI),可以说xs:anySimpleType是有意义的。但这是我能想到的唯一一个赞成的案例。

答案 1 :(得分:3)

xsd:anySimpleType(和xsd:anyType)是特殊的所谓ur-type定义(前者是简单的ur-type);顺便说一下,当谈到XSD数据类型时,我总是指出this diagram

仅仅是这个特殊,我相信是这些类型没有出现在Intellisense中的部分原因。我想另一个原因是它默认分配了 类型;换句话说,对于你的属性,如果你没有设置类型,它将是anySimpleType,无论如何。

但是,我也承认这种解释不适用于其他编辑 - Eclipse就是其中之一;你在智能感知中获得所有这些类型,没有问题......