加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:25:42 所属栏目:asp.Net 来源:网络整理
导读:我有一个动作,它返回一个特定类的对象的JsonResult.我已经使用一些attrib来装饰这个类的属性以避免使用null字段.类定义是: private class GanttEvent { public String name { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] pu
我有一个动作,它返回一个特定类的对象的JsonResult.我已经使用一些attrib来装饰这个类的属性以避免使用null字段.类定义是:
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; }
    }

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

var res = new List<GanttEvent>();

我回来使用:

return Json(res,JsonRequestBehavior.AllowGet);

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

[{"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):

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方法以使用新类:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读