Newtonsoft.Json.JsonReaderException:无法将字符串转换为日期时间:

2 c# sqlite xamarin

我正在尝试将一些日期插入到我的本地数据库中。我收到错误:

{Newtonsoft.Json.JsonReaderException:无法将字符串转换为日期时间:20-09-1982 12:00:00。路径“[0].BIRTHDAY”,第 1 行,位置 71。

这是我的代码:

var insertdata = new ClientIndividualTable
{
     COID = item.COID,
     CLIENTID = item.CLIENTID,
     BIRTHDAY = Convert.ToDateTime(item.BIRTHDAY)
};

await DefaultSettings.conn.InsertOrReplaceAsync(insertdata);
Run Code Online (Sandbox Code Playgroud)

我也尝试过仍然出现错误:

DateTime.Parse(item.BIRTHDAY)
Run Code Online (Sandbox Code Playgroud)

将来我该如何解决并避免这种情况?

bra*_*ry9 5

看来您的错误不在开头的行中var insertdata = new ClientIndividualTable,而是在之前的一些行中。

您的错误可能会出现与此类似的行。

MyJsonClass item = JsonConvert.DeserializeObject<MyJsonClass>(fileText);
Run Code Online (Sandbox Code Playgroud)

您必须创建一个日期时间转换器,以便 Newtonsoft 知道如何处理所使用的自定义格式。之后,您必须装饰用于向 DateTime 属性添加属性的类。

JSON 文件示例:

{
    "COID" : "myCompanyId",
    "CLIENTID" : "myClientId",
    "BIRTHDAY" : "20-09-1982 12:00:00",
}
Run Code Online (Sandbox Code Playgroud)

与JSON结构匹配的类:

public class MyJsonClass
{
    public string COID { get; set; }
    public string CLIENTID { get; set; }
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime? BIRTHDAY { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

JsonConverter此类似。

public class CustomDateTimeConverter : DateTimeConverterBase
{
    private const string Format = "dd-MM-yyyy HH:mm:ss";

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime)value).ToString(Format));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.Value == null)
        {
            return null;
        }

        var s = reader.Value.ToString();
        DateTime result;
        if (DateTime.TryParseExact(s, Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
        {
            return result;
        }

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我的答案基于这篇博文