我使用匿名类型来表示对象,以便我可以使用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
答案 0 :(得分:1)
在查看堆栈跟踪之后,看起来您正在对没有值的可空对象执行.Value。尝试将这一行更改为:
CompletedTime = movie.CompletedTime, // just pass in the nullable object as is
如果不是答案,那么包含完整方法也会有所帮助。