反序列化DateTime? JSON

时间:2013-11-22 14:56:04

标签: c# json datetime serialization

我有一个列表,其中包含类类型的元素,其中包含属性

[DataMember]
public DateTime? DateOfBirth { get; set; }

我将整个列表序列化为如下文件:

    JsonSerializer serializer = new JsonSerializer();
    serializer.Converters.Add(new JavaScriptDateTimeConverter());
    serializer.NullValueHandling = NullValueHandling.Ignore;

    using (StreamWriter sw = new StreamWriter(@"c:\json.txt"))
    using (JsonWriter writer = new JsonTextWriter(sw))
    {
        serializer.Serialize(writer, _myList);
    }

当我尝试反序列化时:

    JsonSerializer serializer = new JsonSerializer();
    serializer.Converters.Add(new JavaScriptDateTimeConverter());
    string text = System.IO.File.ReadAllText(@"c:\json.txt");

    _myList = JsonConvert.DeserializeObject<List<UserInformation>>(text);

我收到以下错误:

在“命名空间”上将值设置为“DateOfBirth”时出错。

  • 编辑 -

Json看起来像:“DateOfBirth”:新日期(-1459735200000)(我无法找到DateOfBirth == null时的样子)

我是初学者,使用Json,我很难理解它,有人可以向我解释问题是什么,我该如何解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:0)

如果你使用newtonsoft库,那么你可以为你的json Deserialize添加一个很好的小通用方法:

public T Deserialize<T>(string json)
{
    try
    {
        var value =  Newtonsoft.Json.JsonConvert
            .DeserializeObject<T>(json);
        return value;
    }
    catch (Exception ex)
    {
        // examine the ex.Message here if required
    }
    return default(T);
}

这可能会让您更近一步

答案 1 :(得分:0)

由于我没有得到帮助我的答案,我将发布我用来解决这个问题的解决方案。我真的不想这样做,但我不得不将DateTime更改为long,而是保存Ticks,当我需要日期时我可以像这样转换

DateTime dt = new DateTime(long ticks);