У меня есть проблема с созданием надлежащего XML/JSON с помощью моего WebService при работе с тегами simpleContent в XSD.XSD simpleContent с API WCF/Web
Прежде всего, у меня есть только файл 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, что ограничение simpleContent не признано Xsd.Exe.
Есть ли способ получить этот «стандартный» выход или .Net просто не может этого сделать?
Благодаря
UPDATE
Я был в состоянии заставить его работать на моей службы WCF. Решение было довольно простым ... просто положил [XmlSerializerFormat] в верхней части интерфейса, и voilà. Причина в том, что сериализатор по умолчанию (DataContractSerializer) не может правильно обрабатывать атрибуты xml. Кроме того, имейте в виду, что WCFStorm также использует DataContractSerializer: я обнаружил, что даже при использовании XmlSerializer у меня был плохой XML в WCFStorm. Затем я проверил с SoapUI, и он работал! (потеряно еще несколько часов).
Итак, давайте сделаем эту работу на моем проекте Web API, для JSON ....