Ich versuche, Daten in JSON zu serialisieren. Aber ich sehe unter Ausnahme aus.JSON Objekt wird nicht für große Daten serialisiert
OutOfMemoryException wurde vom Benutzercode nicht behandelt.
Eine Ausnahme des Typs 'System.OutOfMemoryException' aufgetreten in Newtonsoft.Json.dll wurde aber in Benutzercode
Below i definiert meinen Code nicht behandelt:
Hauptregler:
public class TrackingController : BaseAngularController
{
var lstDetails = _services.GetTrackingDetailsByAWBIds(awbids, awbType);
if (lstDetails != null)
{
return AngularJson(lstDetails);
}
}
Basis Controller:
public abstract class BaseAngularController : Controller
{
public AngularJsonResult<T> AngularJson<T>(T model)
{
return new AngularJsonResult<T>() { Data = model };
}
}
Angular JSON Ergebnis Klasse:
public class AngularJsonResult<T> :AngularJsonResult
{
public new T Data
{
get { return (T)base.Data; }
set { base.Data = value; }
}
}
JSON Ergebnis Klasse:
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());
}
}
Serialisierung Objekt JSON:
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);
}
}
Her e ich definierte AngularJson
Methode zum Übergeben von Objekt und überschreiben ExecuteResult
Methode zum Konvertieren von Objekt in JSON.
Also meine SerializeData
Methode vorging Response
und Objet in JSON konvertieren, wie Data.ToJson()
Bitte teilen Sie mir Ihre Anregungen wissen.
Ist dieser Code implementiert, auf einem Testserver die Erweiterungsmethode anstelle von
response.Write(Data.ToJson());
verwenden oder testen Sie es durch ein:Die folgende Erweiterungsmethode kann dafür verwendet werden IDE? Welche IDE verwendest du? –
Ja, dieser Code wird auf dem Testserver bereitgestellt. –
Das könnte also ein JVM-Speicherproblem sein - das klingt so, als hätten Sie nicht genügend Speicher zugewiesen, um das zu verarbeiten, was Sie gerade serialisieren wollen. Wie groß sind die Daten? –