3

我在 Windows Phone 7.1 (Mango RC) 上使用 DataContractJsonSerializer 从 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 中反序列化对象数组时,我实际上是在字符串中获取引号,我不得不逐个属性地手动将它们剥离。

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

我在这个管道的某个地方做错了什么导致引号被逐字处理......或者我可以用 DataContractJsonSerializer 做些什么来使它实际上不给我引号?

4

1 回答 1

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-引号。

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

于 2011-09-25T13:22:44.420 回答