代码之家  ›  专栏  ›  技术社区  ›  Tobias Forster

日期时间系统。将json字符串反序列化到DataSet后发生FormatException

  •  1
  • Tobias Forster  · 技术社区  · 8 年前

    在将json字符串反序列化到数据集之后,我对DateTime格式有一个大问题。

    Dim formatter = new JsonSerializerSettings() With { .DateFormatString = "yyyy-MM-ddThh:mm:ssZ" }
    Dim json = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented,formatter)
    

    在这两行之后,我得到了格式良好的DateTime格式 (例如,“2015-11-24T09:36:00Z”)

    但在那之后,我必须将这个json字符串转换为DataSet对象。 我是这样做的:

    Dim ds = JsonConvert.DeserializeObject(Of DataSet)(json,formatter)
    

    现在,DateTime值如下所示:“2015年11月24日09:36:00”

    最后,这个值以一个异常结束,即它不是有效的DateTime,如果我想将其解析为DateTime。。。

    DateTime.Parse("11/24/2015 09:36:00")
    

    所以也许有一些格式化程序我必须使用? 我不知道。。。

    希望你能帮助我! 提前感谢您!

    编辑: Jsonstring示例:

    {"records":[{"Key":"EIG*11111","ChangeDate":"2015-11-24T09:36:00Z"}]}
    

    此更改日期将在数据行中格式化为2015年11月24日上午09:36:00

    1 回复  |  直到 8 年前
        1
  •  0
  •   Tetsuya Yamamoto    8 年前

    JSON。NET具有 IsoDateTimeConverter 类,您可以在其中指定日期格式,以将JSON字符串中格式化的UTC日期时间解析为 DateTime 具有 DateTimeFormat 所有物属性用法应如下所示:

    Dim formatter As New IsoDateTimeConverter With { .DateTimeFormat = "dd/MM/yyyy" }
    Dim ds = JsonConvert.DeserializeObject(Of DataSet)(json, formatter)
    

    或以单行形式使用:

    Dim ds = JsonConvert.DeserializeObject(Of DataSet)(json, New IsoDateTimeConverter With { .DateTimeFormat = "dd/MM/yyyy" })
    

    请注意,您需要添加 Newtonsoft.Json.Converters 要启用的命名空间 IsoDateTimeConverter

    之后,使用 DateTime.ParseExact() 使用上面指定的格式,以确保返回的日期字符串可以转换为 日期时间 类型

    类似问题(在C#上下文中):

    Deserializing dates with dd/mm/yyyy format using Json.Net