Desirialisasi penstriman Json.NET: pemprosesan fail JSON yang besar dengan cekap
Untuk fail JSON yang besar yang mengandungi banyak objek yang serupa, adalah penting untuk mengelakkan memuatkan keseluruhan fail ke dalam memori. Json.NET menyediakan cara untuk menyahsiri kandungan JSON secara langsung daripada strim, dengan ketara mengurangkan penggunaan memori.
Percubaan dan had awal
Menyahsiri objek secara terus dalam gelung akan menganggap fail sebagai objek tunggal, yang akan gagal disebabkan kehadiran senarai JSON akar. Menyahsiri JSON ke dalam senarai C#, walaupun anda boleh membaca item satu demi satu, masih menggunakan banyak memori kerana senarai itu menyimpan semua objek desiri.
Penstriman Penstririan
Untuk membaca objek dalam strim secara berurutan, kedudukan permulaan setiap objek perlu dikenal pasti dan dinyahsiri dengan sewajarnya. Ini boleh dicapai dengan menggunakan atribut reader.TokenType
dalam gelung:
<code class="language-csharp">JsonSerializer serializer = new JsonSerializer(); MyObject o; using (FileStream s = File.Open("bigfile.json", FileMode.Open)) using (StreamReader sr = new StreamReader(s)) using (JsonReader reader = new JsonTextReader(sr)) { while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { o = serializer.Deserialize<MyObject>(reader); // 处理对象 o } } }</code>
Kod ini hanya dinyahsiri apabila pembaca menemui permulaan objek ({). Melangkau penanda lain memastikan penghuraian fail besar yang cekap tanpa menggunakan RAM yang tidak diperlukan. Ulasan // 处理对象 o
ditambahkan pada kod untuk mengingatkan pembaca bahawa objek MyObject
yang dibaca perlu sebenarnya diproses selepas penyahserikatan.
Atas ialah kandungan terperinci Bagaimanakah Json.NET Stream Boleh Menyahserialisasi Fail JSON Besar dengan Cekap untuk Meminimumkan Penggunaan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!