Json 带有WCF/Web API的XSD simpleContent

Json 带有WCF/Web API的XSD simpleContent,json,xml,wcf,xsd,asp.net-web-api2,Json,Xml,Wcf,Xsd,Asp.net Web Api2,在XSD中处理simpleContent标记时,我的Web服务在生成正确的XML/JSON时遇到问题 首先,我只有一个XSD文件(没有WSDL),其中包含以下内容(简化): 但我得到: "altitudeCoordinate":{ "unit": "ft", "unitSpecified": "true, "Value": 2.1 我看到Xsd.Exe无法识别simpleContent限制 有没有办法让这种“标准”输出或.Net无法做到这一点 谢

在XSD中处理simpleContent标记时,我的Web服务在生成正确的XML/JSON时遇到问题

首先,我只有一个XSD文件(没有WSDL),其中包含以下内容(简化):

但我得到:

"altitudeCoordinate":{
        "unit": "ft",
        "unitSpecified": "true,
        "Value": 2.1
我看到Xsd.Exe无法识别simpleContent限制

有没有办法让这种“标准”输出或.Net无法做到这一点

谢谢

更新

我能够使它为我的WCF服务工作。解决办法很简单。。。只需将[XmlSerializerFormat]放在接口的顶部,瞧。 原因是默认序列化程序(DataContractSerializer)无法正确处理xml属性。 另外,请注意WCFStorm也使用DataContractSerializer:我发现即使在使用XmlSerializer时,WCFStorm中的XML也不好。然后我用SoapUI检查了一下,结果它工作了!(仍然损失了几个小时)


现在,让我们在我的Web API项目上进行这项工作,对于JSON…

最后,我想出了一个解决方案。只是提醒一下:我的目标是不接触生成的类

用于SOAP/XML 正如我在更新中所述,解决方案非常简单,我只是在WCF接口上添加了以下属性:

[XmlSerializerFormat]
用于REST/JSON 解决方案是为转换不好的“麻烦”类定义元数据类型类

例如,下面是如何在自动生成的文件中定义VerticalDataValue类(我剥离了属性和名称空间):

请注意,只有在基类是局部的情况下,这才是可能的

当然,这是高维护代码,但至少不会影响自动生成的类

<altitudeCoordinate>
  <Value>2.1</Value>
    <unit>ft</unit>
    <unitSpecified>true</unitSpecified>
</altitudeCoordinate>
"altitudeCoordinate": {
        "@unit": "ft",
        "text": "2.1"
 }
"altitudeCoordinate":{
        "unit": "ft",
        "unitSpecified": "true,
        "Value": 2.1
[XmlSerializerFormat]
public partial class VerticalDataValue {

/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public VerticalUnitEnum unit;

/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool unitSpecified;

/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public double Value;
}
[MetadataType(typeof(VerticalDataValueMetaClass))]
public partial class VerticalDataValue { }
public class VerticalDataValueMetaClass
{
    [JsonProperty("@unit")]
    public VerticalUnitEnum unit;

    [JsonIgnore]
    public bool unitSpecified

    [JsonProperty("text")]
    public double value;
}