asp.net-mvc – MVC4 Action返回没有null的JsonResult

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC4 Action返回没有null的JsonResult前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个动作,它返回一个特定类的对象的JsonResult.我已经使用一些attrib来装饰这个类的属性以避免使用null字段.类定义是: @H_404_2@private class GanttEvent { public String name { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public String desc { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public List<GanttValue> values { get; set; } }

在我的动作中我使用了一个对象

@H_404_2@var res = new List<GanttEvent>();

我回来使用:

@H_404_2@return Json(res,JsonRequestBehavior.AllowGet);

不幸的是,我仍然在输出时收到空值:

@H_404_2@[{"name":"1.1 PREVIOS AL INICIO ","desc":null,"values":null},{"name":"F04-PGA-S10","desc":"Acta preconstrucción",{"name":"F37-PGA-S10","desc":"Plan de inversión del anticipo",{"name":"F09-PGA-S10","desc":"Acta de vecindad",{"name":"F05-PGA-S10","desc":"Acta de inicio",{"name":"F01-PGA-S10","desc":"Desembolso de anticipo","values":null}]

我错过了什么或做错了什么?

解决方法

正如Brad Christie所说,MVC4仍然使用JavaScriptSerializer,因此为了让你的对象被Json.Net序列化,你将不得不执行几个步骤.

首先,从JsonResult继承一个新类JsonNetResult,如下所示(基于this solution):

@H_404_2@public class JsonNetResult : JsonResult { public JsonNetResult() { this.ContentType = "application/json"; } public JsonNetResult(object data,string contentType,Encoding contentEncoding,JsonRequestBehavior jsonRequestBehavior) { this.ContentEncoding = contentEncoding; this.ContentType = !string.IsNullOrWhiteSpace(contentType) ? contentType : "application/json"; this.Data = data; this.JsonRequestBehavior = jsonRequestBehavior; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); var response = context.HttpContext.Response; response.ContentType = !String.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; if (ContentEncoding != null) response.ContentEncoding = ContentEncoding; if (Data == null) return; // If you need special handling,you can call another form of SerializeObject below var serializedObject = JsonConvert.SerializeObject(Data,Formatting.None); response.Write(serializedObject); } }

然后,在您的控制器中,重写Json方法以使用新类:

@H_404_2@protected override JsonResult Json(object data,JsonRequestBehavior behavior) { return new JsonNetResult(data,contentType,contentEncoding,behavior); }

猜你在找的asp.Net相关文章