-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();   
} 

私は、メモリ不足を言って、writer.WriteValue(TargetObject.Data.Value)で任意のアイデアをOutOfMemoryException例外が発生しました私はカスタムシリアル化を保つことができますが、この問題を避けることができますか?

私はシリアル化しようとしているオブジェクトが1GB以上であることに注意してください。

+1

メモリに書き込みますか?ディスクに直接書き込みます。 – kristianp

+0

これは質問の誤植かもしれませんが、 'writer.WriteEndArray();'の呼び出しは 'foreach'ループの外に移動する必要があります。 – dbc

+0

@kristianp、私はhttpリクエストとしてデータを送り返しています... –

答えて

0

最後に見つかったのは、.NETからString型のオーバーフローが発生したためです。だから、単にStringフィールドのデータが大きすぎると、json.netに問題がないので解決策はありません。私の解決策はデータを単純化することです。または、全体を格納するのではなくドライブにファイルとして出力することですデータはいつでも文字列フィールドとしてメモリに格納されます。ちょうど不可能です。

0

はあなたがJsonWriterを放棄し、バッファなしストリームを使用して、より手動でシリアライズを行う必要がありthis blog.

ごとにストリーミングとPushStreamContentを使用してみてください。

+0

String型の内部例外オーバーフローが見つかりました...その大きすぎる、String組み込みのハンドルは組み込まれていません... –