【问题标题】:Could not get minOccurs="1" maxOccurs="1" for a string type in a DataContract无法为 DataContract 中的字符串类型获取 minOccurs="1" maxOccurs="1"
【发布时间】:2011-09-26 06:39:20
【问题描述】:

以下是我的 WCF 服务中的 DataContract 及其在 wsdl 文件中显示的相应 xsd 架构。

[Serializable]
[XmlRoot(Namespace = "http://www.example.com/l0257/services/mgnt/datatypes/0/1",IsNullable = false)]
public partial class InstrumentData
{
    private string _serialNo;
    private string _model;
    private int _pointsRecorded;

    [XmlElement(ElementName = "SerialNo", IsNullable = false)]
    public string SerialNo
    {
        get { return _serialNo; }
        set { _serialNo = value; }
    }

    [XmlElement(ElementName = "Model", IsNullable = false)]
    public string Model
    {
        get { return _model; }
        set { _model = value; }
    }

    [XmlElement(ElementName = "PointsRecorded", IsNullable = false)]
    public int PointsRecorded
    {
        get { return _pointsRecorded; }
        set { _pointsRecorded = value; }
    }
}

WSDl 文件包含相应数据合同的以下信息:

 <xs:complexType name="InstrumentData">
 <xs:sequence>
  <xs:element minOccurs="0" maxOccurs="1" name="SerialNo" type="xs:string" /> 
  <xs:element minOccurs="0" maxOccurs="1" name="Model" type="xs:string" /> 
  <xs:element minOccurs="1" maxOccurs="1" name="PointsRecorded" type="xs:int" /> 
  </xs:sequence>
  </xs:complexType>

谁能告诉我我的数据合同中缺少什么来获取 Instrumentdata 类的“Model”和“SerialNo”属性的 minOccurs=1 和 maxOccurs=1。

【问题讨论】:

  • 您可以使用 xsd.exe 命令 (msdn.microsoft.com/en-us/library/x6c1kb0s%28v=vs.71%29.aspx) 对其进行逆向工程,并查看 xsd 工具如何根据 xml 架构为您生成类
  • 感谢您的回复。我已经修改了 xsd 并从中创建了一个 c# 类文件。但有趣的是,如果我再次为这个类文件生成 xsd 文件,我会得到 minOccurs=0

标签: wcf xml-serialization datacontract


【解决方案1】:

请参阅here 以获取有关确定 minOccurs 方式的完整说明。似乎对于引用类型,您必须指定 IsNullable=true 才能生成 minOccurs=1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多