2015-02-09 72 views
1

我正在使用匿名类型来表示对象,以便我可以使用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中的CompletionTimeTime属性为null(因为未观看电影,因此尚未完成)中的Movie对象,我得到一个System.InvalidOperationException异常:Nullable对象必须有一个值

因此,我试图将其更改为上面的代码,但仍然得到相同的错误。

如果电影还没有完成,我想要一个空值,但我得到这个错误。有什么方法可以解决这个问题,还是我应该尝试一种不同的方法?

movie.CompletedTime的类型是“DateTime?”

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

堆栈跟踪低于:

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

'movie.CompletedTime'是什么类型? – 2015-02-09 20:06:30

+0

您确定您使用的JSON编写器可以处理空值吗? – 2015-02-09 20:07:57

+0

我明白'CompletedTime'不能为空。如果'movie.CompletedTime'为空,它应该有什么价值?可以使'CompletedTime'为空或将其设置为最小值。 – 2015-02-09 20:11:58

回答

1

看你的堆栈跟踪它看起来像你不具有值的可空对象上做一个.value的经过。尝试改变这一行这样的:

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

这也将有助于包括完整的方法,你有他们,如果这不是问题的答案。

相关问题