匿名类型“Nullable对象必须具有值”错误

时间:2015-02-09 20:05:02

标签: c# asp.net json

我使用匿名类型来表示对象,以便我可以使用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中有Movie对象,其中CompletedTime属性为空(因为电影没有被观看,因此尚未完成),我得到了一个 System.InvalidOperationException:可以为空的对象必须具有值

所以,我尝试将其更改为上面的代码,我仍然得到同样的错误。

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

movie.CompletedTime的类型为&#34; DateTime?&#34;

编辑:每当我调试此代码时,调试器都会进入foreach循环并进行迭代。但是,当它处于迭代时,其中Objects.Movie对象包含属性CompletedTime(movie.CompletedTime),其中值为null,它捕获错误并将我返回到调用上述代码的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

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题