【问题标题】:How to building JSON result C#,MVC?如何构建 JSON 结果 C#,MVC?
【发布时间】:2017-03-03 01:42:37
【问题描述】:

我有这个数据

并想像这样返回它

我写了这段代码

[HttpGet]
public JsonResult GetTime()
{
    var data = _db.CourseTimes.Select(c => new { c.Day, c.StartTime, c.EndTime })
        .GroupBy(c=>c.Day).ToList();

    return Json(data, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • 您目前返回的 JSON 是什么?你到底想改变什么?您能否更具体地回答您的问题
  • 避免将代码/数据添加为图像(除非它确实是关于图像处理的问题)。
  • 感谢您的评论。我会自定义 JSON 结果她是这样的形象:i.stack.imgur.com/OCbHl.png
  • 也许你可以使用:var DataJs = JsonConvert.SerializeObject(data);

标签: c# json asp.net-mvc json.net asp.net-mvc-5


【解决方案1】:

试试这个

[HttpGet]
public JsonResult GetTime()
{
     var data = _db.CourseTimes
         .GroupBy(c => c.Day)
         .ToDictionary(g => g.Key, v => v.Select(c => new { start = c.StartTime, stop = c.EndTime }));

    return Json(data, JsonRequestBehavior.AllowGet);
}

按天分组并使用以天为键的字典来获得您想要的预期格式。

【讨论】:

    【解决方案2】:

    您必须将数据转换为仅具有 Start 和 Stop 属性的类;您可能还需要致电 .ToDictionary 以让 JSON 转换器知道您真正想要什么:

    // Class for Database input
    public class Course {
        public string Day { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
    }
    
    // Class for JSON output
    public class StartEnd {
        public DateTime Start { get; set; }
        public DateTime Stop { get; set; }
    }
    
    // Some data to test :)
    var testData = new[] {
        new Course() {
            Day = "Sunday",
            StartTime = DateTime.Parse("01-01-2000 08:20:00"),
            EndTime = DateTime.Parse("01-01-2000 10:20:00")
        },
        new Course() {
            Day = "Saturday",
            StartTime = DateTime.Parse("01-01-2000 11:00:00"),
            EndTime = DateTime.Parse("01-01-2000 14:00:00")
        },
        new Course() {
            Day = "Monday",
            StartTime = DateTime.Parse("01-01-2000 18:20:00"),
            EndTime = DateTime.Parse("01-01-2000 21:20:00")
        },
        new Course() {
            Day = "Saturday",
            StartTime = DateTime.Parse("01-01-2000 20:00:00"),
            EndTime = DateTime.Parse("01-01-2000 22:00:00")
        },
    };
    
    // The actual data processing
    var jsonData = testData
        .GroupBy(x => x.Day, x => new StartEnd() { Start = x.StartTime, Stop = x.EndTime })     // Convert to output type while grouping
        .ToDictionary(x => x.Key, x => x.ToArray());                                            // Convert to dictionary, iterating IEnumerables creates by GroupBy
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2018-08-08
      • 2011-06-21
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多