自定义序列化中的 OutOfMemoryException - JSON.NET
OutOfMemoryException in Custom Serialization - JSON.NET
我使用 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。
尝试根据 this blog.
使用流式传输和 PushStreamContent
您可能不得不放弃 JsonWriter 并使用无缓冲流进行更多手动序列化。
终于找到了,原因是.NET中String类型溢出异常。所以,简单地说,对于字符串字段来说,它的数据太大了,没有解决方案,因为 json.net 没有问题,我的解决方案是简化我的数据,或者作为驱动器上的文件输出而不是存储它的整个数据在内存中随时作为字符串字段,这是不可能的....
我使用 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。
尝试根据 this blog.
使用流式传输和 PushStreamContent您可能不得不放弃 JsonWriter 并使用无缓冲流进行更多手动序列化。
终于找到了,原因是.NET中String类型溢出异常。所以,简单地说,对于字符串字段来说,它的数据太大了,没有解决方案,因为 json.net 没有问题,我的解决方案是简化我的数据,或者作为驱动器上的文件输出而不是存储它的整个数据在内存中随时作为字符串字段,这是不可能的....