如何在Java中使用/反序列化.Net WCF服务JSON响应

时间:2015-02-27 10:42:47

标签: java c# json wcf serialization

在Java中使用/反序列化WCF .NET JSON响应时遇到问题。 JSON响应采用以下格式。

{"d":"[
{\"ID\":123,\"Company\":\"Microsoft\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.microsoft.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"},

{\"ID\":124,\"Company\":\"Google\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.google.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"},

{\"ID\":125,\"Company\":\"Apple\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.abc.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"}
]"}

在Java代码方面,我遇到了解决这个json响应以解决我的对象及其相应属性的问题。

这是我目前用于反序列化json响应的java代码。

String companyTitle = "";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonResponseString);
if (element.isJsonObject()) {
JsonArray companies = element.getAsJsonArray();
JsonObject company = companies.get(0).getAsJsonObject();
companyTitle = company .get("Company").getAsString();     
}

JSON响应格式有问题吗?任何形式的帮助都表示赞赏,提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定你为什么得到那个回复 - 它不是有效的json。它有两个问题

  1. 外方括号不应用引号括起来。
  2. 需要删除引号转义字符(不确定是否只是将它们放入?)
  3. 如果没有你发布你得到的实际错误(提示:即使堆栈溢出很强大,我们还没有开发出阅读思维的能力),很难知道实际问题是什么。

答案 1 :(得分:1)

汤姆是对的。有效的JSON应如下所示:

{"d":[
    {"ID":123,"Company":"Microsoft","Country":"USA",
    "website":"http://www.microsoft.com",
    "FirstName":"john","Email":"abc@gmail.com"},

    {"ID":124,"Company":"Google","Country":"USA",
    "website":"http://www.google.com",
    "FirstName":"john","Email":"abc@gmail.com"},

    {"ID":125,"Company":"Apple","Country":"USA",
    "website":"http://www.aabc.com",
    "FirstName":"john","Email":"abc@gmail.com"}
]}

你的代码就像这样:

String companyTitle = "";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonResponseString);
JsonObject object = element.getAsJsonObject();
if (object.isJsonObject()) {
    JsonArray companies = object.getAsJsonArray("d");
    JsonObject company = companies.get(0).getAsJsonObject();
    companyTitle = company .get("Company").getAsString();     
}