WCF Rest服务 - 从同一方法返回对象或列表/对象数组?

时间:2013-03-14 15:37:51

标签: c# json wcf wcf-rest

我有一个WCF REST服务,由另一个应用程序/服务(我无法控制)调用。此其他服务期望从我的服务调用单个服务方法,并可能返回单个JSON对象或所述对象的数组。我没有遇到服务返回其中任何一个的问题,但无法弄清楚如何(或者是否可能)从同一服务方法返回对象或对象数组。以下是代码示例:

返回单个JSON对象:

[DataContract]
public class Item
{
  [DataMember]
  public string ItemId { get; set; }

  [DataMember]
  public int number { get; set; }
}


[OperationContract]
[WebInvoke(Method = "POST",
   RequestFormat = WebMessageFormat.Json,
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "items")]
public Item GetItems(RequestObject requestItems)
{
  Item newItem = SqlDataAccess.GetStandaloneItem(requestItems);
  return newItem;

  //Return format is:
  //{"ItemId" :"ABCDEFG","number" :90}
}

返回对象数组:

[DataContract]
public class ItemList
{
   [DataMember]   
   public List<Item> items { get; set; }
}

[OperationContract]
[WebInvoke(Method = "POST",
   RequestFormat = WebMessageFormat.Json,
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "items")]
public ItemList GetItems(RequestObject requestItems)
{
  ItemList newItemList = SqlDataAccess.GetItems(requestItems);
  return newItemList;

  //Return format is:

  //{"items": [
  //     {"ItemId" :"ABCDEFG","number" :30},
  //     {"ItemId" :"HIJKLMN","number" :49},...]
  //}
}

这个想法是将这两个结合起来,以便可以返回任何类型(Item或ItemList)。理想情况下,调用它的app / service将能够处理只有一个对象的数组,他们已经同意支持这些对象,但是在我们需要上线之前不会进行更改。

我还没有找到一种方法来做到这一点 - 唯一看起来可能有用的是ServiceKnownTypeAttribute ......我是否在正确的轨道上?

我感谢任何帮助/建议。

0 个答案:

没有答案