1

我们将数据类型创建为 XSD 定义。然后将这些 xsd 文件导入 WebSphere Application Server。

我们希望 WebSphere Application Server 能够使用这些数据类型调用 WCF Web 服务。

原来的xsd如下:

    <xs:simpleType name="Stillingsprosent">
         <xs:restriction base="xs:double"/>
    </xs:simpleType>

    <xs:element name="gjennomsnittStillingsprosent" type="Stillingsprosent" minOccurs="0" maxOccurs="1"/>

通过 xsd.exe 运行它会生成以下 C# 代码:

public partial class GjennomsnittStillingsprosent {

private double gjennomsnittField;

private bool gjennomsnittFieldSpecified;

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public double gjennomsnitt {
    get {
        return this.gjennomsnittField;
    }
    set {
        this.gjennomsnittField = value;
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool gjennomsnittSpecified {
    get {
        return this.gjennomsnittFieldSpecified;
    }
    set {
        this.gjennomsnittFieldSpecified = value;
    }
}
}

然后,当我们在 WCF 合同中使用此数据类型时,它会生成以下 xsd:

<xs:complexType name="GjennomsnittStillingsprosent">
 <xs:sequence>
  <xs:element name="gjennomsnittField" type="xs:double"/>
  <xs:element name="gjennomsnittFieldSpecified" type="xs:boolean"/>
 </xs:sequence>
</xs:complexType>
<xs:element name="GjennomsnittStillingsprosent" nillable="true" type="tns:GjennomsnittStillingsprosent"/>
  • 我们希望数据合约与​​原始 xsd 相同。
  • 我们也希望在生成后不需要编辑文件。(数据模型很大)

问题与 minoccurs=0 的可选字段有关,这些字段确实可以为空,但 xsd.exe 是在 .net 具有可空类型之前创建的。

我们如何确保 WCF 合约中使用的数据类型与 XSD 中指定的数据类型完全相同?

4

1 回答 1

0

像这样声明它:

[DataContract]
public class Stillingsprosent{
[DataMember]
public double stillingsprosent;
}

然后在某处使用它:

[DataMember(EmitDefault=false)]
public Stillingsprosent? gjennomsnittStillingsprosent;

EmitDefault=false 表示默认时不会发出(即这里为null)

于 2012-08-16T12:35:45.010 回答