gpt4 book ai didi

mysql - 尝试将 Json.net newton 与 MySQL 日期一起使用但得到 NullReferenceException

转载 作者:行者123 更新时间:2023-11-29 13:17:39 24 4
gpt4 key购买 nike

我有一个 ASP MVC 项目,它连接到 2 个不同类型的数据库,1 个是 SQL Server,它在 Json.net Newton 上运行良好,然后我设法编写一个适当的函数来从第二个数据库读取数据MySQL 的类型。它运行良好,直到我使用 Json.net 进行 JSON 序列化,我花了一段时间才发现它只是不喜欢 MySQL 日期类型(日期时间或时间戳)。现在我明白.net日期类型与MySQL日期时间完全不同,但是有没有办法绕过这个问题?实际上我的日期都是 ISO 格式的,所以理论上我什至不想转换它们或任何东西,我想保持它们不变(yyyy-mm-dd)并按原样显示它们,但 json.net 似乎无论如何都要尝试转换它们:(

我收到此异常:NullReferenceException,我的 MySQL 代码如下:

MySqlDataReader rdr = cmd.ExecuteReader();
DataTable dt = new DataTable("test");

if (rdr.HasRows)
{
dt.BeginLoadData();
dt.Load(rdr);
dt.EndLoadData();
}

output = JsonConvert.SerializeObject(
dt,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Formatting.None,
DateFormatString = "yyyy-MM-dd"
});

如果我使用快速监视查看数据表对象,它看起来像一个正常的工作日期,并且我还比较了两个数据库的结果,我发现两个数据库数据表对象结果没有任何差异,但它在之后立即抛出异常。我猜测 JSon.net Newton 不允许使用其他日期类型,但是有没有办法绕过它并让它将其序列化为常规字符串(未更改)?

如果我从查询中排除日期字段,那么一切都很好,所以我知道只是日期字段有问题。有什么建议吗?


编辑
StackTrace返回的异常如下:

   at System.Object.GetType()
at Newtonsoft.Json.JsonWriter.CreateUnsupportedTypeException(JsonWriter writer, Object value)
at Newtonsoft.Json.JsonWriter.WriteValue(JsonWriter writer, PrimitiveTypeCode typeCode, Object value)
at Newtonsoft.Json.JsonWriter.WriteValue(JsonWriter writer, PrimitiveTypeCode typeCode, Object value)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.Converters.DataTableConverter.WriteJson(JsonWriter writer, Object value, JsonSerializer serializer)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeConvertable(JsonWriter writer, JsonConverter converter, Object value, JsonContract contract, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Type type, Formatting formatting, JsonSerializerSettings settings)
at IntranetApplication.Controllers.ReportsController.ListFilteredData(FormCollection collection) in c:\Users\sesa213338\Documents\Visual Studio 2012\Projects\Viconics\IntranetApplication\Controllers\ReportsController.cs:line 192
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()

最佳答案

在这个问题上花了几个小时后,我发现我的问题与我的一些字段在 MySQL 中默认的零日期有关。 Newtown 的 JSon.net 不喜欢它们,除非您将它们转换为正确的格式。该过程可以通过一个简单的属性 Convert Zero Datetime=True 轻松应用,您需要将其添加到 MySQL 连接字符串中。所以基本上,连接字符串看起来像这样:

server=localhost;uid=yourusername;pwd=yourpassword;database=yourdbname;Convert Zero Datetime=True;

现在,它在 MySQL 中不再是 0000-00-00 格式,而是在 JSON 输出结果中将它们显示为 0001-01-01 。现在,我可以对两种数据库类型使用完全相同的序列化为 JSON 的代码。

关于mysql - 尝试将 Json.net newton 与 MySQL 日期一起使用但得到 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com