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 и выполнить дополнительную сериализацию вручную, используя небуферизованный поток.

Другие вопросы по тегам