-1

Я создал свой собственный метод пользовательской сериализации с Json.NET, метод выглядит следующим образом:OutOfMemoryException на заказ Сериализация - 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 ГБ.

+1

Вы пишете в память? Напишите непосредственно на диск. – kristianp

+0

Это может быть опечатка в вопросе, но вызов 'writer.WriteEndArray();' должен быть перемещен за пределы цикла foreach. – dbc

+0

@kristianp, я отправляю данные обратно как http-запрос ... –

ответ

0

Я нашел, наконец, причина в том, что исключение из переполнения типа String из .NET. Таким образом, просто, это слишком большие данные для поля String, нет решения, так как нет проблемы с json.net, мое решение заключается в упрощении моих данных или выходе в виде файла на диске, а не в хранении всего данные в любое время в памяти как поле строки, просто невозможно ....

0

Попробуйте использовать потоковую и PushStreamContent согласно this blog.

Вы, возможно, придется отказаться от JsonWriter и сделать более ручной сериализации с помощью небуферизованных потока.

+0

не совсем, то, что я нашел, является внутренним переполнением исключений для String Type ... его слишком большой, встроенный в String cant handle ... –