處理較大大小的 JSON 檔案時,使用標準 JsonConvert.Deserialize 方法遇到挑戰並不少見。本文將透過深入研究 Json.NET 提供的獨特解決方案來解決這個問題。
如原始問題所示,預設的反序列化方法在處理時可能會導致記憶體異常大型 JSON 檔案。這通常是由於反序列化過程的記憶體性質造成的,這對於海量資料集可能會出現問題。
在問題中描述的特定場景中,額外的出現併發症。 JSON 檔案包含多個由無效語法分隔的陣列,使其不符合 JSON 標準。這種無效的格式為 Json.NET 的自動反序列化帶來了問題。
為了克服這些挑戰,Json.NET 提供了專門的解決方案:JsonTextReader。透過直接使用 JsonTextReader 讀取 JSON 文件,我們可以將 SupportMultipleContent 標誌設為 true。此標誌允許讀者處理包含多個陣列的非標準 JSON 格式。
我們採用串流方法,而不是嘗試一次反序列化整個檔案。使用循環,我們可以反序列化 JSON 檔案中的每個單獨項目,從而使我們能夠以節省記憶體的方式處理資料。
下面的程式碼片段示範了這個流式處理方法:
using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(stringUrl)) using (StreamReader streamReader = new StreamReader(stream)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { reader.SupportMultipleContent = true; var serializer = new JsonSerializer(); while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { Contact c = serializer.Deserialize<Contact>(reader); Console.WriteLine(c.FirstName + " " + c.LastName); } } }
透過使用設定了SupportMultipleContent 標誌的JsonTextReader ,我們即使面對非標準語法,也可以有效解析大型JSON 檔案。這種方法確保了記憶體效率和資料完整性。
以上是如何在.NET 中高效解析大型非標準 JSON 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!