无法将Json反序列化为对象

时间:2014-03-19 15:56:01

标签: c# json deserialization json-deserialization

这是我的Json:

{"Username":"Test","ProductIds":"[30, 50]","RouteName":"ABCD"}

这是我的目标:

public class SuggestMobileModel
    {
        public string Username { get; set; }
        public List<int> ProductIds { get; set; }
        public string RouteName { get; set; }
    }

当我将Json转换为该对象时,我可以收到UsernameRouteName,但ProductIds始终为null。它仅在我删除ProductIds值中的引号时才有效,如下所示:

{"Username":"Test","ProductIds":[30, 50],"RouteName":"ABCD"}

如果不删除代码,我现在可以成功反序列化? Json是由代码生成的,所以它总是有引号。

--- EDIT !!! ---

这是创建Json字符串的Java代码。有任何错误吗?它正在使用org.json库。

// 1. create HttpClient
            HttpClient client = new DefaultHttpClient();
            HttpResponse response;

            // 2. make POST request to the given URL
            HttpPost httpPost = new HttpPost(urlSuggestRoute);

            String json = "";

            // 3. build jsonObject
            JSONObject jsonObject = new JSONObject();
            jsonObject.accumulate("Username", User.getUsername());
            List<Integer> listProductIds = new ArrayList<Integer>();
            if (Cart.getCart() != null && Cart.getSize() > 0) {
                for (int i = 0; i < Cart.getSize(); i++) {
                    listProductIds.add(Cart.getCartItem(i)
                            .getProductAttribute().getProductId());
                }
            }
            jsonObject.accumulate("ProductIds", listProductIds);
            jsonObject.accumulate("RouteName", txtRoute.getSelectedItem()
                    .toString());

            // 4. convert JSONObject to JSON to String
            json = jsonObject.toString();

            // 5. set json to StringEntity
            StringEntity se = new StringEntity(json);

            // 6. set httpPost Entity
            httpPost.setEntity(se);

            // 7. Set some headers to inform server about the type of the
            // content
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");

            // 8. Execute POST request to the given URL
            HttpResponse httpResponse = client.execute(httpPost);

2 个答案:

答案 0 :(得分:2)

在数组值周围放置双引号是无效的JSON(请参阅http://json.org/处的语言语法)。因此,您的JSON解析器可能不支持它。

其他背景信息:您的JSON将ProductIds定义为字符串值[30, 50]的一对。

答案 1 :(得分:2)

好的,我已经明白了。在生成Json的代码中,我应该使用JsonArray而不是List<Integer>,然后库不会在数组周围加上引号。

非常感谢您的帮助:)