这是我的json:
[
{"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。不能存储&lt;&gt;在 DATETIMEColumn。预期类型是DateTime。
那么如何将我的json转换为数据表,所有列都是字符串
答案 0 :(得分:2)
您可以将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);
您可以在here阅读DateParseHandling
设置。
检查此Live Fiddle
答案 1 :(得分:0)
序列化为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