这是我的儿子:
[
{"ID":"1","DATETIME":"2018-05-02T00:00:00"},
{"ID":"2","DATETIME":"2018-05-02T00:00:00"},
{"ID":"3","DATETIME":""},
{"ID":"4","DATETIME":"2018-05-02T00:00:00"}
]
我使用DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsondata);
将json转换为datatable,但是对于null datetime列,我得到以下错误:
字符串不能被识别为有效的DateTime.不能将<>存储在DATETIMEColumn中。预期类型为DateTime。
那么,如何将json转换为所有列都是字符串的datatable呢?
发布于 2018-05-03 08:56:34
您可以定义Serializer
设置来忽略DateTime
解析,以便将动态JOSN转换为DataTable
。Downnside表示,DateTime
将在DataTable
中作为字符串读取。
var settings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None
};
string json = "[{\"ID\":\"1\",\"DATETIME\":\"2018-05-02T00:00:00\"}, {\"ID\":\"1\",\"DATETIME\":\"\"}]";
var jsonObj = JsonConvert.DeserializeObject<DataTable>(json, settings);
Console.WriteLine(jsonObj.Rows.Count);
您可以在DateParseHandling
上阅读这里设置。
检查这个活果酱
发布于 2018-05-03 08:49:48
序列化到DataTable
的问题是,您可以控制如何创建列,在您的示例中,空日期就是问题所在。虽然可以创建您自己的自定义JsonConverter
,这将是引用复杂和大量的代码,我的建议是反序列化为List<Dictionary<string, string>>
。例如:
var result = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(jsondata);
现在,您可以循环遍历动态数据:
foreach (var dictionary in result)
{
foreach (var kvp in dictionary)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
}
这将为您提供如下输出:(包括JSON数据中的任何其他属性):
Key: ID, Value: 1
Key: DATETIME, Value: 2018-05-02T00:00:00
Key: ID, Value: 2
Key: DATETIME, Value: 2018-05-02T00:00:00
Key: ID, Value: 3
Key: DATETIME, Value:
Key: ID, Value: 4
Key: DATETIME, Value: 2018-05-02T00:00:00
https://stackoverflow.com/questions/50159805
复制相似问题