3ギガバイトほどのjsonファイルをデシリアライズする方法はありませんか?
Utf8Json・DataContractJsonSerializerの2つで試しましたが、両方とも失敗しました。
Utf8Jsonはデシリアライズ中に内部でハングアップ。
DataContractJsonSerializerはハングアップこそしないものの、メモリ量が大きすぎてパソコン自体が動かなくなりました。
デシリアライズする方法はないのでしょうか。
正直jsonのデシリアライズをあきらめてSqlなどのデータベースに移行するぐらいしか解決方法が思いつきません。
なにかいい方法はないでしょうか。
C#
1 static bool Load(string filename, Type type, out object outData, bool isBackup) 2 { 3 if (!System.IO.File.Exists(filename)) 4 { 5 outData = null; 6 return false; 7 } 8#if UTF8Jsonの場合 9 outData = null; 10 try 11 { 12 System.IO.FileStream fs = new System.IO.FileStream( 13 filename, 14 System.IO.FileMode.Open, 15 System.IO.FileAccess.Read); 16 outData = JsonSerializer.NonGeneric.Deserialize(type, fs); 17 } 18 catch (Exception ex) 19 { 20 outData = null; 21 } 22#else 23 System.IO.FileStream fs = null; 24 try 25 { 26 var serializer = new DataContractJsonSerializer(type, GetSerTypes(type).Where(ldata => ldata != type)); 27 fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read); 28 outData = serializer.ReadObject(fs); 29 } 30 catch (Exception ex) 31 { 32 outData = null; 33 } 34 fs?.Close(); 35#endif 36 }
回答5件
あなたの回答
tips
プレビュー