我有一个将 DataTable 序列化为 JSON 的服务,当我检索服务数据时,我想反序列化回 DataTable...问题是,我不能,因为 JSON.NET 在序列化中添加了一些内容然后它无法识别...
我的数据表中的所有日期时间值最终看起来像这样:
"date_time_value":{"IsValidDateTime":true,"Year":2020,"Month":4,"Day":20,"Hour":14,"Minute":50,"Second":46,"Microsecond":0,"Millisecond":0}
JSON.NET 像这样输出序列化的 JSON...所以我希望它也知道如何反序列化它...如何将日期序列化为简单字符串以便我可以反序列化数据?
编辑:我有一个返回数据的 Controller 方法。
[HttpPost]
[Route("Query")]
public ActionResult<string> Query([FromBody]SqlDto content)
{
return Ok(_mySqlGenericService.Query(content.HostnameOrIpAddress, content.Username, content.Password, content.SqlCommand, content.SqlParameters));
}
Controller 调用的方法:
public string Query(string hostnameOrIp, string username, string password, string sqlCommand, List<SqlParameter> sqlParameters = null)
{
var mySqlDatabaseConnection = new MySqlDatabaseConnection(hostnameOrIp, username, password);
DataTable dt = mySqlDatabaseConnection.Query(sqlCommand, ConvertQueryParamListToTupleList(sqlParameters));
return JsonConvert.SerializeObject(dt);
}
MySqlDatabaseConnection
类仅连接到 MySQL 数据库,Query
方法返回 DataTable。
请注意,无论我直接返回DataTable还是使用JsonConvert.SerializeObject()
方法将其转换为JSON字符串后再返回,返回值最终都是相同的JSON。
EDIT2:对于以后可能会看到这个问题的任何人,我错误地假设了 DataTable 实际上处于低级别......我认为它只是某种形式的字符串数组,这是完全错误的...... DataTable 对象比我意识到的要复杂得多。它以不同的方式处理来自不同数据源的输入(因此 MS SQL 数据看起来与 MySQL 数据不同,因为它们以不同的对象格式加载到 DataTable)。
最佳答案
看来您正在使用的数据库驱动程序不使用System.DateTime
来表示日期,而且可能无论如何也不应该这样做。它似乎是 MySqlDateTime
根据其序列化的属性来判断类型。 Json.net 无法识别这种类型,但您可能有一个后备转换器将其视为对象。我自己对这种类型进行了一些测试,它转换为 null
。
我不知道您是否会为此找到一个现成的转换器,它可能存在于某个地方,幸运的是创建一个应该很容易。
public class MySqlDateTimeConverter : JsonConverter<MySqlDateTime>
{
public override MySqlDateTime ReadJson(JsonReader reader, Type objectType, MySqlDateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var dateTime = serializer.Deserialize(reader, typeof(DateTime));
return new MySqlDateTime((DateTime)dateTime);
}
public override void WriteJson(JsonWriter writer, MySqlDateTime value, JsonSerializer serializer)
{
var dateTime = value.GetDateTime();
serializer.Serialize(writer, dateTime);
}
}
关于c# - 为什么 JSON.NET 在我的 DataTable 中以这种格式输出 DateTime 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61335802/