WCF返回错误的JSON

时间:2012-05-14 09:42:19

标签: c# json wcf

我有一个必须返回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 \” \ “名称\”:\ “IMPASSE \”}],\ “responseStatus \”: {\“status \”:0,\“message \”:\“成功!!! \”}}“}

我使用php脚本进行测试。首次解码后:

  

stdClass对象(

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

只有在我的第二个json_decode之后,我得到了我想要的东西:GOOD JSON Response

我可以在服务中更改什么才能第一次获得好的JSON?我想只解码一次。

2 个答案:

答案 0 :(得分:2)

你JSON'ing两次 - 一次在你的方法中,第二次告诉WCF在WebInvoke属性中使用JSON序列化。

为什么不多做几个合同并返回它们,而不是手动构造结果字符串?

答案 1 :(得分: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进行序列化。

如果您正在从db动态构建json String,那么尝试查找是否可以获得在所有情况下都足够的通用对象。就像拥有一个具有列名及其值的对象列表,然后将完整列表传回给客户端。