【问题标题】:Anonymous Type "Nullable object must have a value" Error匿名类型“可空对象必须有值”错误
【发布时间】:2015-02-09 20:05:02
【问题描述】:

我使用匿名类型来表示一个对象,以便我可以使用 Json() 方法将其转换为 JSON 格式。下面是我的代码示例。

“MoviesList”变量只是 Objects.Movie 类型的对象列表。

        var result = new List<object>();
        foreach (Objects.Movie movie in MoviesList)
        {
            result.Add(new
            {
                CompletedTime = (movie.CompletedTime == null ? new Nullable<DateTime>() : movie.CompletedTime),
                Genre = movie.Genre,
                Title = movie.Title,
                Director = movie.Director
            });
        }
        return Json(result, JsonRequestBehavior.AllowGet);

之前,我编写了代码,以便匿名类型中的 CompletedTime 属性等于 Movie 对象中的 CompletedTime 属性。

但是,当我运行它并且 MoviesList 中存在 CompletedTime 属性为 null 的 Movie 对象时(因为电影没有被观看,因此还没有完成),我得到一个 System.InvalidOperationException 说:Nullable object必须有一个值

所以,我尝试将其更改为上面的代码,但仍然出现相同的错误。

如果电影尚未完成,我希望有一个空值,但我收到此错误。有什么办法可以解决这个问题还是我应该尝试不同的方法?

movie.CompletedTime 的类型为“DateTime?”

编辑:每当我调试此代码时,调试器都会进入 foreach 循环并进行迭代。但是,当它在 Objects.Movie 对象包含值为 null 的属性 CompletedTime (movie.CompletedTime) 的迭代中时,它会捕获错误并将我返回到调用上述代码并返回捕获的 JsonResult 类型方法错误

StackTrace 如下:

 at System.Nullable`1.get_Value()
   at WebService.Controllers.DataController.GenerateMovieList(DateTime date, String classID) in C:\WebService\Controllers\DataController.cs:line 212
   at WebService.Controllers.DataController.GetMovieList(String Date, String ClassID) in C:\WebService\Controllers\DataController.cs:line 133

【问题讨论】:

  • movie.CompletedTime 是什么类型?
  • 您确定您使用的 JSON 编写器可以处理空值吗?
  • 我了解CompletedTime 不可为空。如果movie.CompletedTime 为空,它应该有什么值?将 CompletedTime 设为可空或将其设置为最小值。
  • 类型系统已经允许空值。您将null 值传递给的代码会抛出异常,明确指出它不支持null。如果您只是没有通过null,那么它显然一开始就不会中断。
  • 所以看起来你正在对一个没有值的可为空对象执行 .Value 。尝试将这一行更改为: CompletedTime = movie.CompletedTime。如果这不是答案,那么包含完整的方法也会有所帮助。

标签: c# asp.net json


【解决方案1】:

查看您的堆栈跟踪后,看起来您确实在对一个没有值的可为空对象执行 .Value。尝试将这一行更改为:

CompletedTime = movie.CompletedTime, // just pass in the nullable object as is

如果这不是答案,包含完整的方法也会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2021-10-03
    • 2012-02-03
    相关资源
    最近更新 更多