2011-02-03 11 views
1

私はWCF RESTサービスを設計しています。設計の要件は、 クライアントが特定の要求の詳細を認識していないことです。WCF REST汎用要求からのタイプ固有の応答の取得?

https://www.domain.com/dashboard/group/id/0

を返します:

Request: GetGroup(GroupId = 0) 
Response: 
{ 
Title="Country", 
children = 
{ 
title="USA", Id=1, type=GROUP}, 
{title="England", Id=2, type=GROUP} 
} 
} 

そして次の要求:たとえば、 が要求以下

https://www.domain.com/dashboard/group/id/3

は返します:

Request: GetGroup(groupId = 3) 
Response: 
{ 
Title="Customers", 
children = 
{ 
title="General Motors", Id=1, type=CUSTOMER}, 
{title="General Electric", Id=2, type=CUSTOMER} 
} 
} 

私の質問はどのように一般的なRESTリクエストを受け取り、型固有の応答を返すのですか?

私のプロジェクトには、JSONレスポンスでシリアル化されるいくつかのタイプがあります。シリアライズされたオブジェクトは、渡されたgroupIdパラメータに依存します。彼らは次のとおりです。

GROUP 
CUSTOMER 
FACILITY 
TANK 

関連の記事では、私がGetGroupById と上記のクラスは、基底クラスのメソッドをオーバーライドする必要があります公開する基本クラスを作成することが示唆されました。この問題をどのようにして攻撃するのがいいのでしょうか? あるいは、その他の提案。

ありがとうございます。

答えて

1

あなたは常にストリームを返すサービスを作成し、MemoryStreamにあなたのオブジェクトをシリアル化するためJsonSerializerを使用して、サービスからMemoryStreamを返すことができます:その場合は

public Stream GetSomeObject(int groupId) 
{ 
    byte[] bytes; 
    var serializer = new JavaScriptSerializer(); 

    switch(groupId) 
    { 
     case 2: 
      var groups = GetGroups(); // fill the groups however 
      bytes = Encoding.UTF8.GetBytes(serializer.Serialize(groups)); 
      break; 
     case 3: 
      var customers = GetCustomers(); 
      bytes = Encoding.UTF8.GetBytes(serializer.Serialize(customers)); 
      break; 
    } 

    return new MemoryStream(bytes); 
} 

、あなたは単純にロードし適切なオブジェクトをパラメータに基づいてメモリに格納し、適切な強く型付けされたオブジェクトをStream経由で返します。

これは、タイプ情報なしでWCFサービスからJsonの結果を返すためにこれまで使用してきたアプローチと同じです(このアプローチはMicrosoftのWCFチームが提案したので、かなり信頼性が高いと思いました)。

+0

感謝ジャスティン - これは私が探していたものに近いと思います。あなたの提案を実装する方法の例がありますか?再度、感謝します。 –

+0

ああ!あなたは私より一歩前です。ありがとうバンドル... –

+0

あなたのコードで参照しているJsonSerializerメソッドのJustinは、Newtonsoft.Jsonまたは他のDLLを使用していますか?それはどこから来ていますか?私はFramework 4を使用しています –

関連する問題