【发布时间】:2016-03-01 10:45:35
【问题描述】:
在 XSD 中处理 simpleContent 标记时,我的 WebService 生成正确的 XML/JSON 时遇到问题。
首先,我只有一个 XSD 文件(没有 WSDL),内容如下(简化):
<xs:complexType name="VerticalDataValue">
<xs:simpleContent>
<xs:extension base="NCADevicePublication:Double">
<xs:attribute name="unit" type="NCADevicePublication:VerticalUnitEnum" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="Double">
<xs:restriction base="xs:double" />
</xs:simpleType>
<xs:simpleType name="VerticalUnitEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="ft"></xs:enumeration>
<xs:enumeration value="m"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
然后我使用 Xsd.exe 生成我的类。
我对这种结构的期望,在 XML 输出中:
<altitudeCoordinate unit="ft">2.1</altitudeCoordinate>
我得到了什么:
<altitudeCoordinate>
<Value>2.1</Value>
<unit>ft</unit>
<unitSpecified>true</unitSpecified>
</altitudeCoordinate>
我希望 JSON 也是如此:
"altitudeCoordinate": {
"@unit": "ft",
"text": "2.1"
}
但我明白了:
"altitudeCoordinate":{
"unit": "ft",
"unitSpecified": "true,
"Value": 2.1
我在MSDN 看到 xsd.Exe 无法识别 simpleContent 限制。
有没有办法获得这种“标准”输出或 .Net 无法做到?
谢谢
更新
我能够使它适用于我的 WCF 服务。解决方案非常简单......只需将 [XmlSerializerFormat] 放在界面的顶部,然后瞧。 原因是默认的序列化器(DataContractSerializer)无法正确处理xml属性。 另外,请注意 WCFStorm 也使用 DataContractSerializer:我发现即使使用 XmlSerializer,我在 WCFStorm 中也有错误的 XML。然后我检查了 SoapUI,它正在工作! (仍然损失了几个小时)。
那么现在,让我们在我的 Web API 项目中使用 JSON....
【问题讨论】:
标签: json xml wcf xsd asp.net-web-api2