【问题标题】:How to handle DBnull when serializing DataSets and DataTables to JSON using JSON.NET使用 JSON.NET 将数据集和数据表序列化为 JSON 时如何处理 DBnull
【发布时间】:2011-12-28 22:58:38
【问题描述】:

我收到以下错误:

“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 值,以免出现异常?

【问题讨论】:

  • 您可能必须在 FillByGameCategoryID 方法中执行此操作。可能在那里编写您自己的 Convert 函数来处理空值,并返回 string.Empty。哪一行抛出你的错误?

标签: c# wcf json serialization json.net


【解决方案1】:

存在与 DataTables 中的空值相关的错误,现已在 Json.NET 4.0 第 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

【讨论】:

  • 我认为这是 .NET 中与 DBNull 相关的一个错误,现在在 Json.NET 中避免
【解决方案2】:

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

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

【讨论】:

  • 这非常有用,它有助于大多数值,尽管我仍然收到 DateTime 时间的异常。我无法更改 DateTime 类型的列的 NullValue 处理。我该如何解决这个问题?
  • 我从未尝试过,但您可以将 DateTime 属性移动到 DataSet 部分类的另一侧。当我靠近带有 C# 编译器的机器时,我会尝试给你一个例子
【解决方案3】:

这是我使用的,默认情况下.Net 做得很好。看看这是否适合你:

return Json(results, JsonRequestBehavior.AllowGet);

只需将 IEnumerable 传递给 Json 函数即可。

希望对您有所帮助。

【讨论】:

  • 嘿,我试过你的方法,但我的编译器无法识别 Json 和 JsonRequestBehaviour
  • 您需要添加 using System.Web.Mvc 才能使用。
  • 我应该说我没有使用 MVC。但是我导入了 System.Web.Mvc 库,它现在可以识别 JsonRequestBehaviour 但仍然无法识别“Json(”
  • 然后它给了我错误:“这里不能使用内部方法“Json””;)但我觉得我们已经到了那里。感谢您迄今为止的所有帮助
  • 我让我的类继承自Controller,但现在它返回一个JsonResult,浏览器给我以下错误:Uncaught Sys.Net.WebServiceFailedException: Sys.Net.WebServiceFailedException: The server method 'GetGames ' 失败并出现以下错误:
猜你喜欢
  • 2011-02-02
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2014-03-16
  • 2016-05-18
  • 1970-01-01
相关资源
最近更新 更多