DataContractJsonSerializer在字符串中保留引号

时间:2011-09-25 13:18:22

标签: json couchdb windows-phone-7.1 wcf-web-api

我在Windows Phone 7.1(Mango RC)上使用DataContractJsonSerializer从Web服务中提取数据。来自我的Web服务的数据如下所示:

[
  {
    "Color":"\"black\"",
    "CurrentPlayerTurn":1,
    "GameId":"\"3adbffa7b5744634aca0e4b743014247\"",
    "GameState":0,
    "OtherPlayerId":null
  },
  {
    "Color":"\"black\"",
    "CurrentPlayerTurn":1,
    "GameId":"\"a292247719e34811a93598d2ff3eb13c\"",
    "GameState":0,
    "OtherPlayerId":"\"shmoebob\""
  }
]

如果你想知道,这个数据是CouchDB map / reduce查询的下游,其输出如下:

{"total_rows":4,"offset":1,"rows":[
{"id":"3adbffa7b5744634aca0e4b743014247","key":"kotancode","value":[0,1,"black",null]},
{"id":"a292247719e34811a93598d2ff3eb13c","key":"kotancode","value":[0,1,"black","shmoebob"]}
]}

我的WP7.1客户端发生的事情是,当我从第一个JSON blob反序列化对象数组时,我实际上是在字符串中得到引号,我不得不手动将它们从属性中删除。 / p>

我的WP7.1客户端正在访问的Web服务是v0.5 WCF Web API RESTful服务,我将这些数据公开为JSON。

在这个管道中的哪个部分我做错了导致引号被字面处理......或者我可以用DataContractJsonSerializer做些什么来让它实际上没有给我引号?

1 个答案:

答案 0 :(得分:4)

这种情况一直发生在我身上..一旦我发布问题,我就会找到答案。问题在于我如何使用JsonValue来解析CouchDB中的信息。

错误的方式:

string color = (row["value"] as JsonArray)[2].ToString(); // this embeds double-quotes

正确的方式:

string color = (row["value"] as JsonArray)[2].ReadAs<String>(); // this doesn't embed double-引号。

希望这能帮助可能遇到同样问题的其他人......