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\":{\"状态\":0, \"消息\":\"成功!!!\"}}"}

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

标准类对象(

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

)

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

我可以在我的服务中进行哪些更改以第一次获得良好的 JSON?我只想解码一次。

4

2 回答 2

2

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

为什么不制作更多合约并返回它们,而不是手动构造结果字符串?

于 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 进行序列化。

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

于 2012-05-14T10:17:39.237 回答