2011-11-14 38 views
1

我收到以下錯誤序列化數據集和數據表時,JSON處理的DBNull:如何使用JSON.NET

"StrongTypingException - The value for column '{ColumnName}' in table '{TableName}' is DBNull."

當我嘗試序列化的DataTable使用JSON.NET一些空值JSON。

這是代碼:

var dataSet= new DsGameInformatie(); 
var adapter = new GameTableAdapter(); 
adapter.FillByGameCategoryID(dataSet.Games, 1); 
var settings = new JsonSerializerSettings 
{ 
    NullValueHandling = NullValueHandling.Ignore, 
    MissingMemberHandling = MissingMemberHandling.Ignore, 
    ObjectCreationHandling = ObjectCreationHandling.Replace, 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore, 
    DefaultValueHandling = DefaultValueHandling.Ignore 
}; 

return JsonConvert.SerializeObject(dataSet.Games, Formatting.None, settings); 

很顯然,我做錯了什麼。我錯過了什麼嗎?我如何處理這些DBNull值,以便我不會遇到異常?

+0

您可能必須在FillByGameCategoryID方法中執行此操作。可能在你那裏使用自己的Convert函數來處理空值,並返回string.Empty。哪一行會拋出你的錯誤? –

回答

-1

這就是我所使用的,默認情況下.Net很好。看看這是否適合你:

return Json(results, JsonRequestBehavior.AllowGet); 

只要將IEnumerable傳遞給Json函數。

希望有所幫助。

+0

嗨,我已經試過你的方法,但我的編譯器不能識別Json和JsonRequestBehaviour – Jeroen

+0

你需要添加一個使用System.Web.Mvc的 這個工作。 –

+0

我應該說我沒有使用MVC。但是我導入了System.Web.Mvc庫,它現在可以識別JsonRequestBehaviour,但它仍然不會識別出「Json(」 – Jeroen

0

假設您的DataSet來自DataSet設計器,您可以更改它處理空值的方式。

http://msdn.microsoft.com/en-us/library/ya91ataz(v=vs.80).aspx

+0

這是非常有用的,它有助於mosts值,雖然我仍然得到DateTime時間的異常。我無法更改類型爲DateTime的列的NullValue處理。我怎樣才能解決這個問題? – Jeroen

+0

我從來沒有嘗試過這種方式,但是您可以將DateTime屬性移動到DataSet的部分類的另一端。當我靠近一臺C#編譯器的機器時,我會試着給你舉個例子。 – sq33G

+0

THAT會很棒,謝謝! – Jeroen