gpt4 book ai didi

c# - MVC JsonResult 有数据,但浏览器没有

转载 作者:太空狗 更新时间:2023-10-29 20:15:37 24 4
gpt4 key购买 nike

我有 Controller 方法 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;
}

代码可以总结为:

  • 获取组织代码
  • 获取并解析 datePassedIn 为 processDate
  • Url解码driverId
  • 执行存储过程,将输出放在结果中
  • 将结果转换为 Json(这是为了帮助解决问题而添加的)
  • 返回转换后的结果

原来是return Json(results);调试时jr值有正确的Value results

Image of paused VS session showing value of <code>jr</code>

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

Image of results in Network tab

我如何获得结果?

编辑 - 添加类定义。尽管这些是 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; }
}

最佳答案

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

From documentation:

You must also apply the DataMemberAttribute to any field, property, or event that holds values you want to serialize.

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

可能的解决方案:

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

2) 将 [DataMember] 属性添加到您希望序列化的属性。

关于c# - MVC JsonResult 有数据,但浏览器没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com