自定义序列化中的OutOfMemoryException - JSON.NET

时间:2016-10-26 04:35:42

标签: c# asp.net-web-api serialization json.net datacontractjsonserializer

我使用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)个异常,说内存不足,我知道我可以保留自定义序列化但是可以避免这个问题吗?

注意,是的,你是对的,我正在尝试序列化的对象超过1GB。

2 个答案:

答案 0 :(得分:0)

根据this blog.

尝试使用流媒体和PushStreamContent

您可能不得不放弃使用无缓冲流的JsonWriter并进行更多手动序列化。

答案 1 :(得分:0)

我终于找到了,原因是因为从.NET溢出String类型的异常。所以,简单地说,它对于String字段来说太大了,没有解决方案,因为json.net没有问题,我的解决方案是简化我的数据,或者作为文件输出到驱动器而不是存储整个数据在内存中的任何时间都是字符串字段,只是不可能......