C# Json使用MySqlDateTime序列化数据表

C# Json使用MySqlDateTime序列化数据表,c#,json,json.net,C#,Json,Json.net,我在一个数据表中得到一种类型的MySqlDateTime,它是从MySql中选择的,就像“从t_存储中选择delivertime”,然后填充到一个数据表中。现在我想通过Newtonsoft.json将这个数据表转换成json,但是它无法获取日期时间,它总是转换为null。下面是一些代码: DataTable dt = new DataTable(); string sql = "select ig, gid, delivertime from t_storage"; MariadbHelper

我在一个数据表中得到一种类型的MySqlDateTime,它是从MySql中选择的,就像“从t_存储中选择delivertime”,然后填充到一个数据表中。现在我想通过Newtonsoft.json将这个数据表转换成json,但是它无法获取日期时间,它总是转换为null。下面是一些代码:

DataTable dt = new DataTable();
string sql = "select ig, gid, delivertime from t_storage";
MariadbHelper db = new MariadbHelper();// a dbhelper 
db.excute(sql).Fill(dt);// pull the sql result into dt
string ret = JsonConvert.SerializeObject(dt, Formatting.Indented);// the delivertime is null: [ {"id":1, "gid":1, "delivertime":null}]
我尝试使用IsoDateTimeConverter格式化日期,但它不起作用

我确信dt.Rows[0][“delivertime”]是MySqlDateTime的一种类型,并且该值不为null。我可以使用“((MySql.Data.Types.MySqlDateTime)dt.Rows[0][“delivertime”]).GetDateTime()将其转换为数据时间类型。在t_存储中,列delivertime是datetime类型


有什么想法吗?

Json.NET使用的默认格式是ISO 8601标准:“2012-03-19T07:22Z”。如果获取的字符串格式不同,则可以在序列化时定义
IsoDateTimeConverter
DateTimeFormat
。你可以读到它

因此,将序列化逻辑定义为

string ret = JsonConvert.SerializeObject(dt, new IsoDateTimeConverter() { DateTimeFormat = "yyyy/M/d H:m:ss" });

当上面的代码运行时,
ret
的确切值是什么?您需要检查表中是否有数据,以及它是否在
dt
中正确填充。ret的值类似于:{“id”:1,“gid”:1,“delivertime”:null}。ret的值完全相同:[{“id”:1,“gid”:1,“delivertime”:null}],我确信dt.Rows[0][“delivertime”]是MySqlDateTime的一种类型,该值不为null。我可以使用“((MySql.Data.Types.MySqlDateTime)dt.Rows[0][“delivertime”]).GetDateTime()'将其转换为DataTime类型。
将其转换为DataTime类型
运行该代码时会得到什么特定值?实际上我尝试了,但失败了。我认为关键点是DataTable中的列类型是MySqlDateTime,而不是字符串。我必须调用'GetDateTime()'获取日期时间类型。可能json.net无法自动转换它。您可以查找
JSonConverter
,在那里您可以根据需要编写序列化和反序列化逻辑。