WCF:如何发布一次多次包含自己的类型

时间:2015-08-26 11:36:43

标签: c# .net wcf soap

我正在尝试发布一个SOAP服务,其中包含一个或多次引用自身的类型。例如:

enter image description here

在上面的屏幕截图中,请注意ItemGroup可以包含一个到多个其他ItemGroup。我尝试了以下内容:

public class ItemGroup : List<ItemGroup>
{
    public string Name { get; set; }
    public string Type { get; set; }
}

但是,然后我运行应用程序,我收到以下错误:

  

类型'ItemGroup'是不受支持的递归收集数据合约

可以向ItemGroup添加List,但使用此服务的应用程序已请求我不这样做。

编辑:

我已经查看了上面实现的替代服务,WSDL看起来像这样:

<xs:element name="ItemGroup">
<xs:complexType>
    <xs:sequence>
        <xs:element name="Type" type="xs:string" />
        <xs:element name="Name" type="xs:string" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ItemGroup" />
    </xs:sequence>
</xs:complexType>

1 个答案:

答案 0 :(得分:0)

您使用了错误的课程

public class ItemGroup : List<ItemGroup>
{
    public string Name { get; set; }
    public string Type { get; set; }
}
上面的

类是不合适的,因为它是一个循环引用,你不能从需要你已经定义的相同类的类继承。

我已经查看了soap代码,您需要2个类来定义ItemGroup和其他类来定义包含ItemGroup List的对象,如下所示:

public class ItemGroup 
{
    public string Name { get; set; }
    public string Type { get; set; }
}

public class ItemGroups:List<ItemGroup> 
{

}