-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类型的异常。所以,简单地说,它的字符串字段太大的数据,没有解决方案,因为json.net没有问题,我的解决方案是简化我的数据,或输出为驱动器上的文件,而不是存储它的整个数据在内存中的任何时间作为字符串字段,只是不可能的....

0

尝试使用流媒体和PushStreamContent按this blog.

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

+0

不完全,我发现是字符串类型内部的异常溢出...它太大了,内置的字符串不能处理... –