0

我有一个 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)。理想情况下,调用它的应用程序/服务将能够处理只有一个对象的数组,他们同意支持,但在我们需要上线之前不会进行更改。

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

我感谢任何帮助/建议。

4

0 回答 0