这是我的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转换为该对象时,我可以收到Username
,RouteName
,但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);
答案 0 :(得分:2)
在数组值周围放置双引号是无效的JSON(请参阅http://json.org/处的语言语法)。因此,您的JSON解析器可能不支持它。
其他背景信息:您的JSON将ProductIds
定义为字符串值[30, 50]
的一对。
答案 1 :(得分:2)
JsonArray
而不是List<Integer>
,然后库不会在数组周围加上引号。
非常感谢您的帮助:)