【问题标题】:Deserialize iso 8601 date反序列化 iso 8601 日期
【发布时间】:2014-03-19 20:20:11
【问题描述】:

我有一门课如下:

public class ViewItem
{
    [DataMember(Name = "title")]
    public string Title { get; set; }

    [DataMember(Name = "created_at")]
    public string CreatedAt { get; set; }
}

当我尝试将 json 字符串反序列化为对象时,我从未获得 CreatedAt 字段的值。我的json字符串如下:

[ { "created_at" : "2014-03-05T10:26:12Z" ,
    "title"      : "task 4"
  } ,
  { "created_at" : "2014-03-05T10:26:12Z" ,
    "title"      : "task 5"
  }
]

反序列化代码如下:

JsonConvert.DeserializeObject<List<ViewItem>>(json);

我已阅读 this article 并尝试提供不同的 json 转换以及日期解析处理,但它不起作用。

更新:

我试过 CreatedAt 属性作为 DateTime,DateTime?和 DateTimeOffset 以及简单的字符串。

【问题讨论】:

  • 您的 JSON 无效。日期值和title 属性之间需要有一个逗号。您可以通过jsonlint.com查看。
  • 谢谢。实际上这是拼写错误,因为我将粘贴从 Visual Studio IDE 复制到此处。不过我更正了。但是还是不行。

标签: c# json datetime json.net iso8601


【解决方案1】:

尝试将[DataContract] 添加到您的类声明中。还将CreatedAt 属性的类型从string 更改为DateTime

[DataContract]
public class ViewItem
{
    [DataMember(Name = "title")]
    public string Title { get; set; }

    [DataMember(Name = "created_at")]
    public DateTime CreatedAt { get; set; }
}

通过这些更改(以及对 JSON 的修复),它对我有用:

string json = @"[{""created_at"":""2014-03-05T10:26:12Z"",""title"":""task 4""},{""created_at"":""2014-03-05T10:26:12Z"",""title"":""task 5""}]";

List<ViewItem> list = JsonConvert.DeserializeObject<List<ViewItem>>(json);
foreach (ViewItem item in list)
{
    Console.WriteLine("Title: " + item.Title);
    Console.WriteLine("CreatedAt: " + item.CreatedAt);
}

输出:

Title: task 4
CreatedAt: 3/5/2014 10:26:12 AM
Title: task 5
CreatedAt: 3/5/2014 10:26:12 AM

【讨论】:

    【解决方案2】:

    您正在使用来自System.Runtime.SerializationDataMemberAttribute。但是JsonConvertNewtonsoft.Json反序列化。

    用途:

    [JsonProperty("title")]
    

    代替:

    [DataMember(Name = "title")]
    

    【讨论】:

      【解决方案3】:
      DateTime dateProperty=Convert.ToDateTime(DateTime)
      

      将产生

      "dateProperty":"/Date(1343966400000-0400)/"

      鉴于:

      string dateProperty=Convert.ToString(DateTime)
      

      将产生

      "dateProperty":"2012 年 8 月 3 日下午 6:20:43"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 2017-08-06
        • 2013-05-14
        • 2013-02-03
        • 1970-01-01
        相关资源
        最近更新 更多