表达ServiceStack DTO类中的项目序列

时间:2014-12-14 23:09:27

标签: c# soap servicestack

我正在使用ServiceStack来创建Soap服务。我想创建一个包含这样结构的肥皂信封

<Items>
  <Item />
  <Item />
</Items>

即。一个包含相同项目序列的容器。

我很难在我的DTO课程中找出如何表达这一点。

[DataContract]
public class Item // inherit ??
{
    // ??
}

[DataContract]
public class ItemListResponse : ResponseBase
{
    [DataMember]
    public Item[] Items { get; set; }
}

我认为它应该在WSDL中表达,就像这样

<xs:simpleType name="Item">
  <xs:restriction base="xs:string" />
</xs:simpleType>
<xs:element name="Item" nillable="true" type="tns:Item" />
<xs:complexType name="Items">
<xs:sequence>
    <xs:element minOccurs="0" maxOccurs="unbounded" name="Items" nillable="true" type="tns:Item" />
</xs:sequence>
</xs:complexType>
<xs:element name="Items" nillable="true" type="tns:Items" />

但我不知道如何让我的Item类表现得像字符串一样。我无法继承字符串,如果我在Item中有一个字符串成员,那么这就是我需要的DTO结构。

我应该如何构建我的DTO课程?

谢谢

1 个答案:

答案 0 :(得分:2)

尝试使用CollectionDataContract,例如:

[CollectionDataContract(ItemName = "Item")]
public class ArrayOfItem : List<Item>
{
    public ArrayOfItem() { }
    public ArrayOfItem(IEnumerable<Item> collection) : base(collection) { }
    public ArrayOfItem(params Item[] collection) : base(collection) { }
}