OutOfMemoryException в пользовательской сериализации - JSON.NET
Я создал свой собственный метод Custom Serialization с JSON.NET, метод выглядит так:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var Obj = (xObject)value;
writer.WriteStartArray();
foreach(var TargetObject in Obj)
{
writer.WriteStartObject();
writer.WritePropertyName(TargetObject.Data.Key);
writer.WriteValue(TargetObject.Data.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
Я получил OutOfMemoryException
исключение в writer.WriteValue(TargetObject.Data.Value)
говоря недостаточно памяти, есть идеи, что я могу сохранить свою сериализацию, но избежать этой проблемы?
Обратите внимание, да, вы правы, объект, который я пытаюсь сериализовать, превышает 1 ГБ.
2 ответа
Наконец, я обнаружил, что причина в том, что исключение из-за переполнения типа String из.NET. Итак, просто слишком большие данные для поля String, решения не существует, так как нет проблемы с json.net, мое решение состоит в том, чтобы упростить мои данные или вывести их в виде файла на диске, а не хранить их целиком данные в любое время в памяти, как строковое поле, просто невозможно....
Попробуйте использовать потоковую передачу и PushStreamContent в соответствии с этим блогом.
Возможно, вам придется отказаться от JsonWriter и выполнить дополнительную сериализацию вручную, используя небуферизованный поток.