RESTfulサービスを構築するためにどのフレームワークを使用していますか(古いWCf Web Apiのように見えます)?Microsoftの新しいMVC4WebAPIを使用することを強くお勧めします。それは本当に成熟し始めており、RESTfulサービスの構築を大幅に簡素化します。これは、WCFWebAPIが廃止されようとしている将来のサポートになる予定です。
ModelClassをリターンタイプとして返すだけで、リクエストのacceptヘッダーに応じてXMLまたはJSONに自動的にシリアル化されます。重複するコードを書くことを避け、サービスは幅広いクライアントをサポートします。
public class TwitterController : ApiController
{
DataScrapperApi api = new DataScrapperApi();
TwitterAndKloutData data = api.GetTwitterAndKloutData(screenName);
return data;
}
public class TwitterAndKloutData
{
// implement properties here
}
リンク
MVC4 Web Apiは、MVC4 2012 RCのみをダウンロードするか、Visual Studio2012RC全体をダウンロードすることで入手できます。
MVC 4:http ://www.asp.net/mvc/mvc4
VS 2012: http: //www.microsoft.com/visualstudio/11/en-us/downloads
オリジナルのwcfwebapiについては、これを試してみてください。acceptヘッダーを調べて、その値に従って応答を生成します。
var context = WebOperationContext.Current
string accept = context.IncomingRequest.Accept;
System.ServiceModel.Chanells.Message message = null;
if (accept == "application/json")
message = context.CreateJsonResponse<TwitterAndCloutData>(data);
else if (accept == "text/xml")
message = context.CreateXmlResponse<TwitterAndCloutData>(data);
return message;
リクエストが開始されたクライアントにacceptヘッダーを設定します。これは、リクエストの送信に使用しているクライアントのタイプによって異なりますが、どのhttpクライアントにもヘッダーを追加する方法があります。
WebClient client = new WebClient();
client.Headers.Add("accept", "text/xml");
client.DownloadString("domain.com/service");
使用する応答ヘッダーにアクセスするには
WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
追加のリソース:http ://dotnet.dzone.com/articles/wcf-rest-xml-json-or-both