2012-05-25 87 views
1

我得到JSON從服務器字符串格式,我把它保存到一個文本文件JSON解析不,引發異常

然後我讀的是文本文件,並給它回服務器,但有我無法解析它回到一個對象。這可能是因爲轉義序列導致了問題,或者我不知道。

請建議,我使用C#和Newtonsoft的JSON.NET

這裏是樣本:從服務器接收

字符串並保存該本地txt文件

{"data":"[{\"MenuId\":483,\"Name\":\"Nikhil menu\",\"Desc\":\"test\",\"ASAP\":\"T\",\"LT\":\"T\",\"FO\":\"T\",\"catList\":[{\"CatId\":5132,\"CatName\":\"Cate00\",\"Desc\":\"test\",\"P1\":{\"Id\":1,\"Name\":\"SML\"},\"P2\":{\"Id\":2,\"Name\":\"MED\"},\"P3\":null,\"P4\":null,\"P5\":null,\"P6\":null,\"CatType\":\"Normal\",\"ItemList\":[{\"Id\":38190,\"Name\":\"XXX\",\"Desc\":\"tesdt\",\"MinQ\":1,\"MaxQ\":99,\"MinP\":0.0,\"MaxP\":0.0,\"P1\":100.0,\"P2\":200.0,\"P3\":-99.0,\"P4\":-99.0,\"P5\":-99.0,\"P6\":-99.0,\"Img\":\"\",\"Icon1\":null,\"Icon2\":null,\"Icon3\":null,\"Icon4\":null,\"OpenOn\":{\"Mon\":\"T\",\"Tue\":\"T\",\"Wed\":\"T\",\"Thu\":\"T\",\"Fri\":\"T\",\"Sat\":\"T\",\"Sun\":\"T\"},\"SpecialOffer\":null,\"AddOnList\":[],\"ItemModList\":[]}]}]}]","message":"Processed Successfully","serviceName":"CreateCache","serviceStatus":"S"} 

串後從服務器讀取相同的本地文本文件

{"data":"[{\"MenuId\":483,\"Name\":\"Nikhil menu\",\"Desc\":\"test\",\"ASAP\":\"T\",\"LT\":\"T\",\"FO\":\"T\",\"catList\":[{\"CatId\":5132,\"CatName\":\"Cate00\",\"Desc\":\"test\",\"P1\":{\"Id\":1,\"Name\":\"SML\"},\"P2\":{\"Id\":2,\"Name\":\"MED\"},\"P3\":null,\"P4\":null,\"P5\":null,\"P6\":null,\"CatType\":\"Normal\",\"ItemList\":[{\"Id\":38190,\"Name\":\"XXX\",\"Desc\":\"tesdt\",\"MinQ\":1,\"MaxQ\":99,\"MinP\":0.0,\"MaxP\":0.0,\"P1\":100.0,\"P2\":200.0,\"P3\":-99.0,\"P4\":-99.0,\"P5\":-99.0,\"P6\":-99.0,\"Img\":\"\",\"Icon1\":null,\"Icon2\":null,\"Icon3\":null,\"Icon4\":null,\"OpenOn\":{\"Mon\":\"T\",\"Tue\":\"T\",\"Wed\":\"T\",\"Thu\":\"T\",\"Fri\":\"T\",\"Sat\":\"T\",\"Sun\":\"T\"},\"SpecialOffer\":null,\"AddOnList\":[],\"ItemModList\":[]}]}]}]","message":"Processed Successfully","serviceName":"CreateCache","serviceStatus":"S"} 

字符串,我將它添加到與另一個類,我用它來重新發送到服務器的對象之後得到,我得到的服務器這個字符串

{"data":"[{\"MenuId\":483,\"Name\":\"Nikhil menu\",\"Desc\":\"test\",\"ASAP\":\"T\",\"LT\":\"T\",\"FO\":\"T\",\"catList\":[{\"CatId\":5132,\"CatName\":\"Cate00\",\"Desc\":\"test\",\"P1\":{\"Id\":1,\"Name\":\"SML\"},\"P2\":{\"Id\":2,\"Name\":\"MED\"},\"P3\":null,\"P4\":null,\"P5\":null,\"P6\":null,\"CatType\":\"Normal\",\"ItemList\":[{\"Id\":38190,\"Name\":\"XXX\",\"Desc\":\"tesdt\",\"MinQ\":1,\"MaxQ\":99,\"MinP\":0.0,\"MaxP\":0.0,\"P1\":100.0,\"P2\":200.0,\"P3\":-99.0,\"P4\":-99.0,\"P5\":-99.0,\"P6\":-99.0,\"Img\":\"\",\"Icon1\":null,\"Icon2\":null,\"Icon3\":null,\"Icon4\":null,\"OpenOn\":{\"Mon\":\"T\",\"Tue\":\"T\",\"Wed\":\"T\",\"Thu\":\"T\",\"Fri\":\"T\",\"Sat\":\"T\",\"Sun\":\"T\"},\"SpecialOffer\":null,\"AddOnList\":[],\"ItemModList\":[]}]}]}]","message":"Processed Successfully","serviceName":"CreateCache","serviceStatus":"S"} 

我不能夠解析這個字符串的文件返回列表

我已經試過

JObject jObject = JObject.Parse(obj.cacheInfo.cData); 
JToken jT = jObject["data"]; 
List<Menu> lMenu = JsonConvert.DeserializeObject<List<Menu>>(jT.ToString()); 

JObject jObject = JObject.Parse(obj.cacheInfo.cData); 
JObject jObject = JObject.Parse(jObject["data"].ToString()); 

任何幫助都行,感謝

+4

在你提到的標題中有一個例外 - 哪個例外? –

+1

根據http://jsonlint.com/即有效的JSON。你的解析器是否爲JSON強制執行任何編碼方案(如UTF-8),並且你是否正在使用適當的方案進行讀/寫/傳輸?什麼是錯誤文本? – JAAulde

+0

「obj」的所有成員是公共的還是你有一些保護? –

回答

0

問題出在服務器上的JSON.NET庫的版本。在一臺服務器上它是3.5,另一臺是4.5。感謝所有的支持。

1

我可能是錯的,但你嘗試過接受的Menu集合作爲 數組?我不確定Json.NET是否會自動將T的JavaScript數組轉換爲List<T>。試試這個:

List<Menu> lMenu = JsonConvert.DeserializeObject<Menu[]>(jT.ToString()).ToList(); 
+0

它是從列表中反序列化的

1Mayur

+0

JavaScript本身並不支持'List ',這意味着它雖然是從列表中序列化的,但它並不一定意味着它會去掉,連載到一個'List '。你試過'T []'嗎? – Richard

+0

Thnx ...現在就這樣做:) – 1Mayur

0

確保屬性是公開的。 確保您反序列化的類具有默認構造函數。 類中的數組 - 它們是如何實現的? 是的,哪個例外?