![](/img/trans.png)
[英]JsonConvert.DeserializeObject<DataTable> throws an exception
[英]JsonConvert.DeserializeObject() throws StackOverflow exception
我正在開發一個托管在Azure上的WebAPI項目,並且遇到了一些反序列化我自己序列化的對象的問題。 我正在做的是將序列化的Json存儲在數據庫中,並在服務中從DB讀取該字符串並嘗試反序列化它。 我得到的確切例外情況如下:
An unhandled exception of type 'System.StackOverflowException' occurred in Newtonsoft.Json.dll
我試圖反序列化的對象是Graph數據結構,它具有無向邊緣並在其節點類型定義中使用基類但接受任何派生類的節點。 這意味着我必須將默認的Json序列化程序設置更改為以下內容:
new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, TypeNameHandling = TypeNameHandling.Auto }
這使它能夠處理由無向邊創建的循環引用,因此它可以處理Graph類型
Graph<Intersection>
接受從交叉點派生類型的任何節點。 Intersection只是一個簡單的抽象類,它有一些基類型屬性,任何派生類只添加一些基類型屬性。
我到目前為止所做的調試步驟如下:
任何幫助將不勝感激,因為我已經嘗試了所有我能想到的解決問題的方法。
該問題似乎與IIS所具有的默認堆棧大小相當,小於我的Json文件的大小。 這就是我沒有在任何其他應用程序中獲得stackoverflow異常的原因,因為它們具有更大的堆棧。
解決方案是在以下行中運行代碼,該代碼在具有更大堆棧的新線程上運行Json反序列化。
Thread thread = new Thread(new ThreadStart(() => graph = JsonConvert.DeserializeObject<Graph<Intersection>>(json, GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings)), 1000000);
thread.Start();
thread.Join();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.