【问题标题】:datetime field in json deserializationjson反序列化中的日期时间字段
【发布时间】:2020-06-11 15:05:52
【问题描述】:

我有一个这样的 .json:

[
    {
        "number":"00000001",
        "dt_doc":"2019-09-26T17:39.000Z",
        "address":"complete address"
    }
]

但是我的字段 dt_doc 有问题,这是我的反序列化代码... 我主要有这个:

public override void CreateNewOutputRows()
    {
        String jsonFileContent = File.ReadAllText(Variables.JsonFilePath);
        JavaScriptSerializer js = new JavaScriptSerializer();
        List<Testata> testata = js.Deserialize<List<Testata>>(jsonFileContent);
        foreach(Testata test in testata)
        {
            Output0Buffer.AddRow();
            Output0Buffer.number= test.number;
            Output0Buffer.dtdoc = test.dt_doc;
            Output0Buffer.address= test.address;
        }
    }

在我的类 Testata.cs 中,我以这种方式定义了该字段:

public DateTime dt_doc { get; set; }

但是我在这个领域遇到了一个异常,可能与8601标准有关,有什么办法解决吗?

这是个例外:

错误:System.FormatException: 2019-09-26T17:39.000Z 它不是 DateTime 的有效值。 ---> System.FormatException: 字符串未被识别为有效的 DateTime 值。

【问题讨论】:

  • 不推荐使用JavaScriptSerializer类,改用Json.NET。要使用JavaScriptSerializer 实现它,您应该创建自定义JavaScriptConverter,如answer 中所示

标签: c# json ssis deserialization json-deserialization


【解决方案1】:

您可以在课堂上将其作为字符串读取,然后:

DateTime.ParseExact(test.dt_doc,"yyyy-MM-ddTHH:mm.fffZ");

【讨论】:

  • 这种方式我试过了,没有异常但是看不到data字段,只有其他字段但是没有这个
【解决方案2】:

错误是因为您在日期中缺少秒数

"dt_doc":"2019-09-26T17:39.000Z"

应该是

"dt_doc":"2019-09-26T17:39.00.000Z"

如果这是有意的,那么您可以指定格式。我已经尝试过使用Newtonsoft.Json

public class Testata
{
    [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-ddTHH:mm.fffZ")]
    public DateTime dt_doc { get; set; }
}

public class DateFormatConverter : IsoDateTimeConverter
{
    public DateFormatConverter(string format)
    {
        DateTimeFormat = format;
    }
}

List<Testata> testata = JsonConvert.DeserializeObject<List<Testata>>(jsonString);

【讨论】:

  • 但是 OP 使用的是JavaScriptSerializer
  • @PavelAnikhouski 谢谢你。我已经更新了提到我使用的库的帖子。
  • 我仍然得到我在第一篇文章中添加的异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
相关资源
最近更新 更多