【发布时间】: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。如果这不是答案,那么包含完整的方法也会有所帮助。