0

私はこれで1つのサンプルWCF​​レストテンプレートWebApiを作成しました。サービスを実行するときにEntity Frameworkを使用してデータを取得し、結果を示す文字列値を返しますが、json値の最後に以下のようなXMLコードを追加する方法私はこれを解決します。

[{"AccountId":1,
  "AccountNumber":"AC001",
  "AccountType":"Restaurant",
  "BusinessName"‌​:"Red SpiceInc",
  "PrimaryContactFirstName":"Varma",
  "PrimaryContactLastName":"Bhupatiraju",
  "P‌​rimaryContactPhone":"(949) 374 2114",
  "PrimaryContactEmail":"redspice@mybusinessapp.com",
  "AccountGuid":"918D3E66-CEFE-11E0-8C2F-0C0B4824019B",
  "EntityState":1,"EntityKey":null}]
<?xml version="1.0" encoding="utf-8"?><Stream p1:nil="true" xmlns:p1="w3.org/2001/XMLSchema-instance"; />

私のコード

[WebGet(UriTemplate = "GetSetting({LocationGuid},{settingName})", ResponseFormat = WebMessageFormat.Json)]
public Stream GetSetting(string LocationGuid, string settingName)
{
    string str = string.Empty;
    string strJSON = string.Empty;
    dynamic contactResponse = new JsonObject();
    List<setting> Result;
    Result = new List<setting>();
    var Location = from acc in objEntity.locations where acc.LocationGuid == LocationGuid select acc;
    if (Location.Count() > 0)
    {
        var LocationId = (from acc in objEntity.locations where acc.LocationGuid == LocationGuid select acc).First();
        var objSetting = from cat in objEntity.settings where cat.SettingName == settingName & cat.LocationId == LocationId.LocationId select cat;
        setting SettingList = new setting();
        foreach (setting setting in objSetting)
        {
            setting Settinglist = new setting();
            Settinglist.SettingId = setting.SettingId;
            Settinglist.AccountId = setting.AccountId;
            Settinglist.LocationId = setting.LocationId;
            Settinglist.SettingName = setting.SettingName;
            Settinglist.SettingValue = setting.SettingValue;
            Settinglist.FieldType = setting.FieldType;
            Result.Add(Settinglist);
        }

        JavaScriptSerializer js = new JavaScriptSerializer();
        strJSON = js.Serialize(Result);
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
        return new MemoryStream(Encoding.UTF8.GetBytes(strJSON));
    }
    else
    {
        return null;
    }
}

この問題を解決するのを手伝ってください。

4

2 に答える 2

1

POCOを返すだけで十分だと思います。メソッドの署名は

public List<setting> GetSetting(string, string)

WCF Web API は、要求ヘッダーに従って、オブジェクトを json または xml にシリアル化します (受け入れます: application/json または application/xml)。

于 2011-09-01T04:39:09.723 に答える
0

misaxi の応答で述べたように、WebApiWebGet操作は通常、応答がどのように返されるかを気にする必要はありません。Web 操作の責任は、単にデータを返すことです。例えば...

[WebGet(UriTemplate = "GetSetting({LocationGuid},{settingName})"]
public List<setting> GetSetting(string LocationGuid, string settingName)
{
    List<setting> Result = null;
    var Location = from acc in objEntity.locations where acc.LocationGuid == LocationGuid select acc;
    if (Location.Count() > 0)
    {
        Result = new List<setting>();
        ....
        foreach (setting setting in objSetting)
        {
            ....
            Result.Add(Settinglist);
        }
     }
     return Result;
}

クライアントが XML、JSON、JSONP、HTML などを受信するかどうかは、クライアント次第です (サーバー側のサポートと併せて)。クライアントのリクエストヘッダーには、クライアントが求めているような表現が含まAccept: application/jsonAccept: application/xmlます。WebApi には、XML (デフォルト) と Json といういくつかの標準形式が事前に読み込まれています。より多様なヘッダーのセットを受け入れるために、必要に応じてより多くの形式を導入できますAccept: ....が、データからこれらの要求された形式への変換は、通常、Web 操作の範囲外であり、設定した (または設定された) フォーマッターに依存します。デフォルトでは)サービスが初期化されたとき。

同様に、WebPost操作は通常、要求の本文が XML か JSON かは気にしません。操作が呼び出されるまでに、フォーマッターはそのペイロードをメソッドのパラメーターに既に変換しています。

于 2011-09-01T16:48:41.560 に答える