0

JSONを返さなければならないwcfサービスがあります。私のコードは次のようになります:

public String areaGetStreetTypes(int city_id, int language_id)
        {
            string json = "";
            string responseList = "{\"triname\":\"IMP\",\"name\":\"IMPASSE\"}";
            if (responseList.Length != 0){
                string responseStatusJSON = "{\"status\":0, \"message\":\"Success !!!\"}";
                json += "{\"responseList\":[" + responseList + "],";
                json += "\"responseStatus\":" + responseStatusJSON + "}";
            }
            else{
                string responseStatusJSON = "{\"status\":1, \"message\":\"Error !!!\"}";
                json += responseStatusJSON;
            }
            return json;
        }

//my interface looks like
[OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "areaGetStreetTypes", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]        
        String areaGetStreetTypes(int city_id, int language_id);

生の形式での応答:

{"areaGetStreetTypesResult": "{\" responseList \ ":[{\" triname \ ":\" IMP \ "、\" name \ ":\" IMPASSE \ "}]、\" responseStatus \ ":{\" status \ ":0、\" message \ ":\" Success !!! \ "}}"}

テストにはphpスクリプトを使用します。最初のデコード後:

stdClass Object(

[areaGetStreetTypesResult] => {"responseList":[{"triname":"IMP","name":"IMPASSE"}],"responseStatus":{"status":0, "message":"Success !!!"}}

)。

2番目のjson_decodeの後でのみ、必要なものが得られます:GOOD JSON Response

良いJSONを初めて取得するために、サービスで何を変更できますか?一度だけデコードしたい。

4

2 に答える 2

2

2回JSONを実行します。1回はメソッドで、2回目はWebInvoke属性でJSONを使用してシリアル化するようにWCFに指示します。

結果文字列を手動で作成する代わりに、さらにいくつかのコントラクトを作成して返すのはなぜですか?

于 2012-05-14T10:05:40.553 に答える
1

以下に示すように返すことができるクラスオブジェクトを作成できます。

namespace Rest
{
    public class JsonRes
    {
        public ResponseList ResponseList { get; set; }
        public ResStatus ResponseStatus { get; set; }

    }
    public class ResponseList
    {
        public string triName { get; set; }
        public string name { get; set; }
    }
    public class ResStatus
    {
        public string status { get; set; }
        public string message { get; set; }
    }

}

WCFフレームワークは、JSONへのシリアル化を行います。

json文字列がdbから動的にビルドされている場合は、すべてのシナリオで十分な汎用オブジェクトを取得できるかどうかを確認してください。列名とその値を持つオブジェクトのリストを作成し、完全なリストをクライアントに返すようなものです。

于 2012-05-14T10:17:39.237 に答える