2012-05-29 56 views
2

我正在編寫一個控制檯應用程序,用於解析來自外部源的JSON數據。這是在C#中使用.NET 4.0(完整版本,而不是客戶端配置文件)。 我試圖使用System.Web.Script.Serialization.JavaScriptSerializer類JSON數據反序列化爲一個對象,像這樣:反序列化大集合的JSON

var targetObject = deserializer.Deserialize<TargetObjectType>(json); 

通常,這工作得很好,但是當數據中包含一個非常大的集合,我得到這個錯誤:System.InvalidOperationException(「操作無效,由於對象的當前狀態。」)我做了一些研究,發現這個:http://support.microsoft.com/kb/2661403。基本上,微軟將物品數量限制爲安全預防措施。

重寫此方法的方法是向支持文章中所述的Web.config添加記錄,但在我的情況下它不起作用。我做了一些研究,發現這個問題的其他人在這裏:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

所以我的問題是:是否有任何方式使用JavaScriptSerializer反序列化與控制檯應用程序中的大集合的JSON對象?

請注意:我的團隊負責人寧願不使用除微軟以外的任何庫。這意味着我不能使用JSON.NET(又名NEWTONSOFT),所以請不要提倡它。

+0

我不知道這是否會有所幫助,但是我們遇到了這個問題和大量的對象。我們通過設置(在你的情況)解決它deserializer.MaxJsonLength = int.MaxValue; – TChadwick

回答

4

我建議你選擇一些其他的Json De/Serializer。例如:http://james.newtonking.com/projects/json-net.aspx

它幾乎處理了我扔了它的任何東西;即使是來自Couchbase服務器的TB大小的轉儲(只要您要在de/serialize的計算機上有適當的RAM)。

/編輯:我讀過,你領導會喜歡堅持香草微軟Webstack。但是,再引用一個組件會節省大量時間和很多頭痛。

+0

我也聽說過有關JSON.net的好東西,我同意試用這個解決方案 – cgatian

+0

謝謝,但我不能使用JSON.net,我必須使用由微軟提供的東西。 –

+5

如果你告訴你的團隊負責人,json.net與MVC4一起發貨會影響他嗎?即使MS認識到它比自己的東西更好。 – Frans