2013-01-01 31 views
0

我需要針對使用asp.net開發的Web服務/ API運行我的iPhone應用程序。序列化ASP.NET webservice的問題?

出於某種原因,我從API調用中返回的響應在JSON的開頭添加了額外的字符和「d」,如下所示。

{"d":"{\"count\":\"0\",\"status\":\"500\",\"recipes\":[]}"} 

從我的基本閱讀來看,這似乎是序列化服務的問題。

  1. 我錯了嗎?
  2. 無論如何,我可以在iPhone客戶端上將其設置爲正確的JSON嗎?

幫助或指導將不勝感激。

回答

0

整體認爲是一個JSON,其中包含一個對象「D」與一個字符串這也是JSON 所以它是JSON內部的JSON。

所以你有一個'外部json':{「d」:「」}
+內部json:{「count」:「0」,「status」:「500」,「recipes」:[ ]}

,如果我們只是沒有插入\內JSON,我們可能會在practie無效JSON。(在這種情況下),我們難道不,但我相信的lib只是試圖成爲安全起見所以它逃脫內部的json並將其編碼爲一個字符串!

獲取字符串和解析它工作正常,如下圖所示,所有被添加有效

id innerJSON = @"{\\\"count\\\":\\\"0\\\",\\\"status\\\":\\\"500\\\",\\\"recipes\\\":[]}"; 
id response = [NSString stringWithFormat:@"{\"d\":\"%@\"}", innerJSON]; 
id data = [response dataUsingEncoding:NSUTF8StringEncoding]; 
id outerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
NSLog(@"%@", outerJson[@"d"]); 

data = [outerJson[@"d"] dataUsingEncoding:NSUTF8StringEncoding]; 
id innerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
NSLog(@"%@ %@", innerJson[@"count"],innerJson[@"status"]); 
+0

樣品中,\\只需要編寫的代碼串。實際的字符串是你上面的字符串的100% –

+0

是的。我知道我可以通過上面提到的方式瀏覽數據,但答案是否有效?我的意思是,爲什麼在每個「 – Neelesh

+0

」之前有一個「d」和「\」,因爲答案是包含另一個JSON字符串的JSON字符串。如果內部JSON werent轉義,outerJSON == {「d」:「JSON_STRING」} ,這將是無效的,這種方式是有效的:) –