我已将f1列的DataTable序列化为byte []。该列被序列化为Base-64字符串,如下所示:
[
{
"f1": "5hAAJEA=",
"f2": "hi_all",
"id": 1
},
{
"f1": "5hrwJEA=",
"f2": "hi world",
"id": 2
}
]
我使用以下代码用Json.Net序列化数据表:
var json = JsonConvert.SerializeObject(dataTable, settings);
将json字符串反序列化为DataTable时,会生成一个数据表对象,其中acolumn f1为字符串(不是byte []),其值为base64字符串。
我认为这是预期的,因为数据表是没有架构的通用结构。
我知道使用list<Dto>
使用类型为byte[]
的属性进行反序列化可以恢复byte [],但这不是一个选项,因为我在sql数据库中使用数据表进行批量插入,反序列化是在运行时完成而没有预先定义Dto(POCO)
类。
我可以从数据库中的表定义创建一个Typed DataTable。
我尝试使用ByteJsonConverter,但它无法提供帮助。
您可以查看the complete c# program online以显示问题: 完整跟踪json序列化/反序列化过程。
更新
我使用TypeNameHandling = TypeNameHandling.Objects,将数据类型保存在json中并获取json:
[
{
"f1": {
"$type": "System.Byte[], mscorlib",
"$value": "5hAAJEA="
},
"f2": "hi all",
"id": 1
},
{
"f1": {
"$type": "System.Byte[], mscorlib",
"$value": "5hrwJEA="
},
"f2": "hi world",
"id": 2
}
]
现在f1的类型为System.Byte [],并且假设DataTableConverter创建了byte []类型的字段而不是字符串。
当我尝试反序列化时,会触发异常错误:
读取DataTable时出现意外的JSON令牌:StartObject。路径&#39; [0] .f1&#39;,第3行,第11位
似乎DataTableConverter
无法处理$ type / $ value对。
我的问题:
如何解决DataTableConverter的错误。
如何使用Base-64字符串将json字符串反序列化为DataTable中的byte []列。