使用JSON.NET将DataSet和DataTables序列化为JSON时如何处理DBnull

时间:2011-11-14 19:50:45

标签: c# wcf json serialization json.net

我收到以下错误:

  

“StrongTypingException - 表'{TableName}'中列'{ColumnName}'的值为DBNull。”

当我尝试使用JSON.NET将带有一些空值的DataTable序列化为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值以便我不会出现异常?

3 个答案:

答案 0 :(得分:2)

DataTables中存在与null相关的错误,现在已在Json.NET 4.0 Release 3中修复

请参阅How can I deserialize an ADO.NET DataTable that contains null values using Json.NET?以及相关问题Null values should be represented as System.DBNull when deserializing a DataTable

答案 1 :(得分:0)

假设您的DataSet来自DataSet设计器,您可以更改它处理空值的方式。

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

答案 2 :(得分:-1)

这是我使用的,默认情况下.Net运行良好。看看这是否适合你:

return Json(results, JsonRequestBehavior.AllowGet);

只需将IEnumerable传递给Json函数。

希望有所帮助。