C# 反序列化日期时间?Json

C# 反序列化日期时间?Json,c#,json,datetime,serialization,C#,Json,Datetime,Serialization,我有一个列表,其中包含包含属性的类类型的元素 [DataMember] public DateTime? DateOfBirth { get; set; } 我正在将整个列表序列化为如下文件: JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new JavaScriptDateTimeConverter()); serializer.NullValueHandling

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

[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);
当我尝试这样反序列化时:

    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);
JsonSerializer serializer=新的JsonSerializer();
添加(新的JavaScriptDateTimeConverter());
string text=System.IO.File.ReadAllText(@“c:\json.txt”);
_myList=JsonConvert.DeserializeObject(文本);
我得到以下错误:

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

  • 编辑-
Json看起来像:“DateOfBirth”:新日期(-1459735200000)(当DateOfBirth==null时,我找不到它的外观)

我是一个使用Json的初学者,我很难理解它,有人能给我解释一下问题是什么,我如何解决这个问题吗


提前感谢

如果您使用newtonsoft库,那么您可以添加一个很好的通用方法来对json进行反序列化

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);
}
public T反序列化(字符串json)
{
尝试
{
var value=Newtonsoft.Json.JsonConvert
.DeserializeObject(json);
返回值;
}
捕获(例外情况除外)
{
//如果需要,请检查此处的ex.消息
}
返回默认值(T);
}

这可能会让你更进一步

因为我没有得到一个对我有帮助的答案,我将发布我用来解决这个问题的解决方案。我真的不想这样做,但我必须将DateTime改为long,并保存刻度,当我需要日期时,我可以这样转换

DateTime dt = new DateTime(long ticks);

JSON是什么样子的?您使用的是wcf还是web API?如果您是手动序列化,我建议使用newtonsoft json序列化程序,而不是使用WCF打包的序列化程序。(甚至微软也使用NewtonSoft serializer for WebApi):从nuget控制台安装软件包NewtonSoft.Json——如果需要更多信息,请回复,我将发布一个答案。这可能与Json中不同的日期时间字符串有关。您可能需要使用newtonsoft json.net之类的工具来提高灵活性Snap JMarsch-我的想法exactly@MichaelPerrenoud我在编辑中添加了Json。我只是添加dll作为参考,我的项目中没有整个库。我刚刚添加了库,但它有点大,我到底在哪里添加它?基本上,添加这个小方法,然后在客户端代码中,rem出反序列化的行,并使用文件的内容作为参数添加对该方法的调用,即
\u myList=deserialize(text)
我尝试过这个方法,唯一的区别是现在它进入catch,返回null,因为我仍然不知道该怎么做,因为错误信息是一样的,我的文本文件包含了所有的数据,并且超过了1个DateOfBirth。