Ich habe ein Problem deserializing eine JSON-Datei von etwa 1 GB. Wenn ich den folgenden Code ausführen bekomme ich eine Ausnahme aus der Erinnerung:Newtonsoft.Json - Nicht genügend Speicher Ausnahme beim Deserialisieren von großen Objekt
using (FileStream sr = new FileStream("myFile.json", FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(sr))
{
using (JsonReader jsReader = new JsonTextReader(reader))
{
JsonSerializer serializer = new JsonSerializer();
dataObject = serializer.Deserialize<T>(jsReader);
}
}
}
die Ausnahme von
Newtonsoft.Json.Linq.JTokenWriter.WriteValue(Int64 value)
geworfen Die Serialisierung gut funktioniert, hier ist der Code ich
bin mitusing (StreamWriter reader = new StreamWriter("myFile.json"))
{
using (JsonReader jsWriter = new JsonWriter(reader))
{
JsonTextWriter jsonWriter = new JsonTextWriter(jsWriter) { Formatting = Formatting.Indented };
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, dataObject, dataObject.GetType());
jsonWriter.Flush();
}
}}
Mache ich bei der Deserialisierung etwas falsch? Können Sie einen Weg zur Deserialisierung eines großen JSON-Objekts vorschlagen?
Dank
1) [Stellen Sie sicher, Sie werden als 64-Bit-Anwendung ausgeführt] (https://msdn.microsoft.com/en- us/library/ms241064% 28v = vs.110% 29.aspx). Wenn Sie im 32-Bit-Modus arbeiten, haben Sie wahrscheinlich gerade nicht genug Speicher. 2) Was ist die vollständige Rückverfolgung der Ausnahmebedingung? Geht dir in einem 'JsonConverter' der Speicher aus? – dbc
Ich bin eine 32-Bit-Anwendung ausgeführt, und ich bin in den nicht genügend Arbeitsspeicher ausführen die Zeile ausgeführt dataObject = serializer.Deserialize (jsReader); und die Funktion, die die Ausnahme auslöst, ist Newtonsoft.Json.Linq.JTokenWriter.WriteValue (Int64-Wert) –
cmarlowe88