【发布时间】:2020-08-03 17:49:58
【问题描述】:
我有一个将 DataTable 序列化为 JSON 的服务,当我检索服务数据时,我想反序列化回 DataTable ...问题是,我不能,因为 JSON.NET 在序列化中添加了一些内容然后它就无法识别...
我的 DataTable 中的所有 DateTime 值最终看起来像这样:
"date_time_value":{"IsValidDateTime":true,"Year":2020,"Month":4,"Day":20,"Hour":14,"Minute":50,"Second":46,"Microsecond":0,"Millisecond":0}
JSON.NET 像这样输出序列化的 JSON……所以我希望它也知道如何反序列化它……如何将日期序列化为简单的字符串,以便我可以反序列化数据?
编辑:我有一个控制器方法返回数据。
[HttpPost]
[Route("Query")]
public ActionResult<string> Query([FromBody]SqlDto content)
{
return Ok(_mySqlGenericService.Query(content.HostnameOrIpAddress, content.Username, content.Password, content.SqlCommand, content.SqlParameters));
}
以及控制器正在调用的方法:
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 中)。
【问题讨论】:
-
您控制服务吗?如果是这样,你能告诉我们创建这个 JSON 的代码吗?
-
我刚刚更新了我的问题以显示相关代码,如果您需要更多信息,请告诉我...如果您认为相关,我可以发布 MySqlDatabaseConnection.Query() 方法...虽然它不应影响任何结果,因为 DataTable 从该方法返回正常
-
您使用
DataTable而不是更合适的东西(例如具有您定义的属性的具体类型)是否有特殊原因? -
实际的推理有点复杂,但有了这个特殊的服务,我需要能够处理任何通用查询和任何通用结果......这就是我使用 DataTable 的原因......令人讨厌的是,这个适用于 Microsoft SQL 的通用输出,但由于某种原因,序列化似乎不适用于 MySQL 数据,我不知道为什么......它们都是序列化之前的 DataTable 对象
-
另外,我了解安全问题以及所有这些......它被严重锁定。但它需要允许通用数据
标签: c# json asp.net-web-api json.net