JSONでデータをシリアル化しようとしています。しかし、私は例外の下で直面している。JSONオブジェクトが巨大なデータに対してシリアル化されない
OutOfMemoryExceptionがユーザーコードによって処理されませんでした。
メインコントローラ:
public class TrackingController : BaseAngularController { var lstDetails = _services.GetTrackingDetailsByAWBIds(awbids, awbType); if (lstDetails != null) { return AngularJson(lstDetails); } }
型 'System.OutOfMemoryExceptionに' の例外は、私は私のコードを定義し
下Newtonsoft.Json.dllで発生したが、ユーザーコードで処理されませんでした
ベースコントローラ:
public abstract class BaseAngularController : Controller
{
public AngularJsonResult<T> AngularJson<T>(T model)
{
return new AngularJsonResult<T>() { Data = model };
}
}
角度JSON結果クラス:
public class AngularJsonResult<T> :AngularJsonResult
{
public new T Data
{
get { return (T)base.Data; }
set { base.Data = value; }
}
}
JSON結果クラス:JSONにオブジェクトをシリアライズ
public class AngularJsonResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
DoUninterestingBaseClassStuff(context);
SerializeData(context.HttpContext.Response);
}
private void DoUninterestingBaseClassStuff(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
var response = context.HttpContext.Response;
response.ContentType = string.IsNullOrEmpty(ContentType) ? "application/json" : ContentType;
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
}
protected virtual void SerializeData(HttpResponseBase response)
{
if (ErrorMessages.Any())
{
Data = new
{
ErrorMessage = string.Join("\n", ErrorMessages),
ErrorMessages = ErrorMessages.ToArray()
};
response.StatusCode = 400;
}
if (Data == null) return;
response.Write(Data.ToJson());
}
}
:
public static class JsonExtensions
{
public static string ToJson<T>(this T obj, bool includeNull = true)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] { new StringEnumConverter() },
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,//newly added
//PreserveReferencesHandling =Newtonsoft.Json.PreserveReferencesHandling.Objects,
NullValueHandling = includeNull ? NullValueHandling.Include : NullValueHandling.Ignore
};
return JsonConvert.SerializeObject(obj, settings);
}
}
彼女私はAngularJson
オブジェクトを渡すメソッドを定義し、オブジェクトをJSONに変換するメソッドExecuteResult
をオーバーライドしました。
だから私のSerializeData
方法はResponse
を渡し、私はあなたの提案をお聞かせくださいData.ToJson()
のように、JSONでオブジェに変換しました。
の代わりに拡張メソッドを使用して、このコードは、テストサーバー上で、展開されている、またはあなたがANを通してそれをテストしていますIDE?どのIDEを使用していますか? –
はい、このコードはテストサーバーにデプロイされています。 –
これはJVMのメモリの問題かもしれません - これは、シリアル化しようとしているものを処理するのに十分なメモリを割り当てていないように思えます。データの量はどれくらいですか? –