我有一个 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 ......我在正确的轨道上吗?
我感谢任何帮助/建议。