2011-09-25 84 views
3

我在Windows Phone 7.1(Mango RC)上使用DataContractJsonSerializer從Web服務中提取數據。從我的web服務的數據是這樣的:DataContractJsonSerializer在字符串中留下引號

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

在你想知道的情況下,這個數據是CouchDB的地圖下游/減少查詢,其輸出是這樣的:

{"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

這一直髮生在我身上......只要我發佈這個問題,我就會找出答案。問題在於我如何使用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-報價。

希望這可以幫助別人誰可能會遇到同樣的問題...