【问题标题】:C#.NET Generating web service reference using WSDL (from XML schema) problemC#.NET 使用 WSDL(来自 XML 模式)生成 Web 服务引用问题
【发布时间】:2011-08-09 17:46:36
【问题描述】:

我正在使用 VS2010 并使用“添加服务引用”功能从我的 WSDL 生成客户端类。我的一个元素有问题,它在 WSDL 中定义如下:

<xs:simpleType name="NumberType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="ONE" /> 
        <xs:enumeration value="TWO" /> 
        <xs:enumeration value="THREE" /> 
    </xs:restriction>
</xs:simpleType>

这种类型用于我的一个元素中,如下所示:

<xs:element name="NumberTypes">
    <xs:simpleType>
        <xs:list itemType="tns:NumberType" /> 
    </xs:simpleType>
</xs:element>

问题在于 VS 将这个特定元素转换为字符串类型,而它应该是一个枚举。所以它将它转换为一个字符串 NumberTypes,它有一个 get 方法返回 numberTypesField 也是字符串类型。

我认为问题与我的架构 NumberTypes 元素使用 xs:list 和“itemType”属性有关。如果我将其更改为带有 type="tns:NumberType" 属性的 xs:element ,则枚举会按应有的方式生成。

那么我怎样才能使枚举与 xs:list 一起工作呢?为什么一开始就不能正确转换?

感谢您的帮助。

【问题讨论】:

  • 啊啊!,互操作性和标准的大谎言。让 java 与 .Net 对话让我松了一口气。祝你好运

标签: c# .net xml visual-studio web-services


【解决方案1】:

让 xs:list 正确序列化的运气并不好。相反,我只允许同一节点的多个实例,而 .NET 知道如何正确地将其放入“列表”或“数组”中。

<xs:element minOccurs="0" maxOccurs="unbounded" name="NumberTypes">
    ...
</xs:element>

【讨论】:

  • 哦,谢谢,这行得通 :) 嗯,它现在可以正确生成枚举(NumberType),并且还生成一个 NumberTypes 元素,其类型为 NumberType[] ...数组有点难以使用 -是否可以让 .NET 生成一个列表?否则我必须调整数组的大小以添加到它,或者将它初始化为枚举的大小,即使可能没有那么多元素。有没有更好的办法?
  • 它不起作用 - 无论我在集合类型下拉列表中选择什么(数组列表、通用列表等),它总是会继续生成数组。有什么想法有什么问题吗?生成的代码总是这样: /// [System.Xml.Serialization.XmlElementAttribute("NumberTypes", Order=0)] public NumberType[] NumberTypes { get { return this.numberTypesField; } 设置 { this.numberTypesField = value; this.RaisePropertyChanged("NumberTypes"); } }
  • 显然这是因为我的架构需要 XMLSerializer 而不是 DataContractSerializer (可以生成列表)。那么这是否意味着我必须使用数组? :s
  • 看起来数组是 .NET 希望您使用的,尽管有一些基于您如何使用序列化对象的技巧。本文有助于澄清:raypendergraph.wikidot.com/article:basic-cs-xml-serialization 请参阅“To-Many”关系部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多