【问题标题】:Returning List of List as JSON is returning list values null以 JSON 形式返回 List 列表正在返回列表值 null
【发布时间】:2017-10-16 22:49:06
【问题描述】:

我正在尝试从我的控制器将列表列表作为 json 返回,

我的控制器代码:

using Newtonsoft.Json;

[HttpGet]
public JsonResult GetPpi()
{
    var customer = EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer;
    var psg = _xDetailService.GetXDetailbyCustomerId(customer.Id);

    var model2 = new List<List<XDetail>>();

    foreach (var pr in psg)
    {               
        var plan = _xDetailService.GetXDetailbyId(pr.Id);
        var model = new List<XDetail>();
        foreach (var x in plan)
        {
            model.Add(new XDetail
            {
                Id = x.Id,
                XNo = x.XNo,
                XName = x.XName,
                XSurname = x.XSurname
            });
        }
        model2.Add(model);
   }

   return Json(model2, JsonRequestBehavior.AllowGet);
}

还有我的 ajax 调用:

function GetPlans() {
    $.ajax({
        cache: false,
        type: "GET",
        url: "/XDetail/GetPpi",
        data: {},
        dataType: 'json',

    });
}

X详细信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Nop.Core.Domain.UnExpected
{
    public partial class XDetail: BaseEntity
    {
        public int? XNo { get; set; }

        public string XName { get; set; }

        public string XSurname { get; set; }

        public double? XDec { get; set; }

        public int? XMaster_Id { get; set; }

        public virtual XMaster XMaster { get; set; }
    }
}

当我在 return model2 处设置一个断点时,它包含了我在 List of List 中需要的所有值。但如果我继续,它们会返回 null。

我遗漏了一些东西,但找不到什么...

并且还使用 AspNet Mvc 5

【问题讨论】:

  • 分享你的Json方法?
  • 为您的 cmets 编辑了问题
  • 什么是BaseEntity?如果它标有[DataContract],那么您还需要使用数据协定属性注释您的派生类。这是因为 AspNet Mvc 5 使用 Json.NET 进行序列化,而 Json.NET 需要这个,如 caliburn.micro serialization issue when implementing PropertyChangedBase 中所述。或者让XDetail 成为一个没有父类型的简单 DTO。
  • @dbc 它只是公共抽象部分类,没有用 [DataContract] 标记。
  • 其实挺好用的,只是我没看到。

标签: c# json asp.net-mvc


【解决方案1】:

您的$.ajax(..) 调用不提供任何成功回调函数 你可以这样做:

function GetPlans() {
    $.ajax({
        cache: false,
        type: "GET",
        url: "/XDetail/GetPpi",
        data: {},
        dataType: 'json',
        success: function(data) {
           // use result data
        }

    });
}

或使用承诺方法:

function GetPlans() {
    $.ajax({
        cache: false,
        type: "GET",
        url: "/XDetail/GetPpi",
        data: {},
        dataType: 'json'
    }).done(function(data){
        // use result data
    });
}

【讨论】:

  • 感谢您的回答,但我的代码已经运行良好。我只是没看到。无论如何我都会接受答案,因为没看到它是我的错:) Ty.
猜你喜欢
  • 2017-01-11
  • 2015-08-20
  • 2017-12-06
  • 2018-05-29
  • 2015-03-12
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
相关资源
最近更新 更多