0
我正在編寫代碼以測試json
從asmx
Web服務中返回C#
。返回的響應是以下格式:將從ASMX服務返回的JSON轉換爲C#對象列表
{"d":"[{\"Id\":\"row1\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test1\",\"Field\":\"N\"},
{\"Id\":\"row2\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test2\",\"Field\":\"N\"}]
最後,我想將數據轉換爲對象的列表。我受限於使用JSON.Net
。
在我轉換json
瞬間返回的響應JArray
使用下面的方法:
private static JArray ConvertToJsonArray(StreamReader reader)
{
var json = reader.ReadToEnd();
string result = json.Replace("{\"d\":\"", string.Empty);
result = result.Replace(@"\", string.Empty);
result = result.Replace("]\"}", "]");
return JArray.Parse(result);
}
正如你所看到的,我做了很多的字符串手動格式,使其最終可以解析。
然後,我循環並在JArray
中取每個JObject
,並在將其添加到列表之前轉換爲所需的對象類型。
這確實給了我想要的結果,但我覺得必須有更優雅的解決方案。
任何人都可以請幫忙嗎?
PS - 爲了簡潔起見,我留了很多代碼。如果需要,我可以提供更多細節。
您是否擁有對asmx Web服務的控制權?它看起來來自該服務的結果正在雙重序列化(這就是爲什麼你有那裏的所有反斜槓)。如果您可以修復Web服務而不是雙重序列化響應,那麼在解析它之前,您不必對字符串進行任何按摩。如果不是,那麼恐怕你沒有太多選擇。 –
我同意@Brian Rogers,它似乎是您在asmx中手動序列化。 查看此博客文章的詳細信息: http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/ –
謝謝。是的,這似乎是問題。我現在不在代碼中,但會稍後再看並更新。 – davy