MVC JsonResult有数据,但浏览器没有数据

Hec*_*res 7 c# asp.net-mvc json asp.net-core

我有控制器方法GetLayer2()。它与GetLayer0()和GetLayer1()非常相似

[HttpGet]
public async Task<JsonResult> GetLayer2(string datePassedIn, string eventType, string driverId)
{
    string orgCode = "HVO"; //User.Identity.GetOrgCode();
    DateTime? processDate;
    DateTime defaultDate = DateTime.Today.AddDays(-1);  //default yesterday 

    if (String.IsNullOrEmpty(datePassedIn))
    {
        _logger.LogError(String.Format("Date passed in was NULL or empty. Using default date {0}", defaultDate.ToString(inputDateFormat)), null);
        processDate = defaultDate;
    }
    else
    {
        try
        {
            processDate = DateTime.ParseExact(datePassedIn, inputDateFormat, cultureProvider);
        }
        catch (FormatException ex)
        {
            _logger.LogError(ex, "Error formatting date {datePassedIn} did not match {inputDateFormat}. using default date {defaultDate}", null);
            processDate = defaultDate;
        }
    }

    driverId = HttpUtility.UrlDecode(driverId);


    IEnumerable<EventTypeLayer2> results = await _context.EventTypeLayer2Results
                                                        .FromSql($"usp_dd_EventType_2 @p0, @p1, @p2, @p3", orgCode, processDate, eventType, driverId)
                                                        .ToListAsync();


    JsonResult jr = Json(results);
    return jr;
}
Run Code Online (Sandbox Code Playgroud)

该代码可以总结为:

  • 获取组织代码
  • 获取并解析datePassedIn到processDate
  • 网址解码driverId
  • 执行存储的过程,将输出放入结果中
  • 将结果转换为Json(已添加以帮助进行故障排除)
  • 返回转换后的结果

最初是return Json(results); 在调试jr值时具有正确的值结果

暂停的VS会话图像,显示<code> jr </ code>的值

在网络标签的浏览器(Chrome)中查看时,我得到了正确的对象计数,但它们都是空的。

“网络”标签中结果的图片

我如何得到结果?

编辑-添加类定义。尽管这些是EF类,但是它们由存储过程填充。

[DataContract]
public class EventTypeLayer2
{
    [IgnoreDataMember]
    [Key]
    public Int64 RowId { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string EventTypeDisplay { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string EventTypeId { get; set; }

    [Column(TypeName = "varchar(20)")]
    public string Colour { get; set; }

    [Required]
    public int Value { get; set; }

    [Column(TypeName = "varchar(100)")]
    public string DriverId { get; set; }

    public int NodeId { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime StartTime { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime EndTime { get; set; }

    public int FirstLogId { get; set; }

    public int LastLogId { get; set; }

    public int MinSpeed { get; set; }

    public int MaxSpeed { get; set; }

    public int AvgSpeed { get; set; }

    public int CalcSummOdo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Eyl*_*ylM 8

您正在[DataContract]EventTypeLayer2类使用属性,但没有[DataMember]为任何类属性提供属性。

从文档:

您还必须将DataMemberAttribute应用于包含要序列化的值的任何字段,属性或事件。

这就是您获得正确数量的对象但没有任何有效成员的原因。

可能的解决方案:

1)[DataContract]从类中删除该属性。默认情况下,所有公共属性都将被序列化。

2)[DataMember]向要序列化的属性添加属性。