2011-11-13 91 views
2

我試圖反序列化作爲服務響應接收到的json字符串。客戶端是C#中的Windows Phone 7。我正在使用Json .NET - James Newton-King deserializor直接將Json字符串轉換爲對象。但有時JSON字符串包含了一些註釋信息用雙引號(「)在他們和解串器失敗,並引發錯誤。看起來這是根據Jsonlint無效的JSON字符串。Json.NET:使用雙引號進行惡化

{ 
    "Name": "A1", 
    "Description": "description of the "object" A1" 
} 

如何處理這樣的Json字符串。如果它是(\「),那麼它就起作用。但是我不能用(\)替換全部(「),因爲在json字符串的其他部分可能會有雙引號。有沒有Json .Net的解碼功能?

+0

嘗試使用自定義的反序列化這個帖子在SO可以幫助你[1] [1] [如何反序列化JSON之前對象轉換爲自定義類型?]:HTTP:// stackoverflow.com/questions/6975789/how-to-convert-json-object-to-custom-type-before-deserializing – DeveloperX

回答

8

它看起來像HttpUtility.JavaScriptStringEncode可能會解決您的問題。

HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(yourObject)) 
0

我會建議寫郵件到服務器管理員/站長,並要求他們用json修復這個問題。

但是,如果這是不可能的,你可以寫簡單的解析,找到雙引號內的非引號雙引號並轉義它們。它幾乎不會超過20行代碼。

+0

嗨,你能幫助你的建議嗎?你在說像一個正則表達式嗎? – franklins

+1

寫出這些線將受到很多人的讚賞。 – krillgar

1

只要做到:

yourJsonString = yourJsonString.Replace("\"", "\\u022"); 
object o = JSonConvert.Deserialize(yourJsonString); 

\ U022是雙引號的ASCII碼。因此,替換\ u022的引號將被您的瀏覽器識別。

並使用\在「\ u022」中使c#識別反斜槓字符。

乾杯