2015-02-09 73 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 

這也將有助於包括完整的方法,你有他們,如果這不是問題的答案。

相關問題