【发布时间】:2018-03-03 04:34:02
【问题描述】:
我的问题与this one 非常相似,但是我没有足够的声誉来对原始答案发表评论。
我有一个名为 FillPDF 的自定义类,我在服务器上对其进行序列化并在客户端进行反序列化。
FillPDF dsPDF = JsonConvert.DeserializeObject<FillPDF>(json);
FillPDF 类由一个 DataSet 属性组成,该属性包含 DataTables 的集合
通过阅读原始问题的解决方案,我知道为什么 DateTime 类型被不正确地设置为 String。我了解 Json.Net 的 DataTableConverter 仅通过查看第一行来推断每个 DataColumn.DataType(我的第一行具有 NULL 值)。
我尝试实施原始问题的解决方案。 Dbc 建议覆盖DataTableConverter。我已经这样做了,我在序列化和反序列化期间使用settings 对象,如下所示:
// Server
FillPDF pdfData = new FillPDF(strUniqueColID);
var settings = new JsonSerializerSettings { Converters = new[] { new TypeInferringDataTableConverter() } };
string json = JsonConvert.SerializeObject(pdfData, Formatting.Indented,settings);
// Client
var settings = new JsonSerializerSettings { Converters = new[] { new TypeInferringDataTableConverter() } };
FillPDF dsPDF = JsonConvert.DeserializeObject<FillPDF>(json,settings);
但是,我没有收到任何错误,并且我的底层数据表仍未正确反序列化。我认为这是因为我正在序列化/反序列化自定义对象,而不是像原始问题中那样简单地使用 DataTable。
我想做的是:
if(c.ColumnName.toLower().Contains("date"))
{
// Set Column's Type to DateTime because I know all Column Names containing "date" should be of type DateTime
}
大概这必须被添加到被覆盖的TypeInferringDataTableConverter。
我不太确定从这里去哪里,所以我转向 SO 急需一些帮助!
谢谢,
贾斯汀。
【问题讨论】:
-
问题似乎是
DataSetConverter通过执行DataTableConverter converter = new DataTableConverter();使用 Newtonsoft 的DataTableConverter硬编码。您可能还需要创建自己的DataSetConverter版本。 -
感谢您的及时回复!我会考虑覆盖
DataSetConverter
标签: c# json serialization datatable