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) を返すことができるように、これら 2 つを組み合わせることが考えられます。理想的には、これを呼び出すアプリ/サービスは、サポートすることに同意した 1 つのオブジェクトのみを含む配列を処理できますが、ライブに移行する前に変更が加えられることはありません。

これを行う方法をまだ見つけていません-それが役立つように見える唯一のものはServiceKnownTypeAttributeです...私は正しい軌道に乗っていますか?

支援/アドバイスをいただければ幸いです。

4

0 に答える 0