我有一个列表,其中包含类类型的元素,其中包含属性
[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,我很难理解它,有人可以向我解释问题是什么,我该如何解决这个问题?
提前致谢
答案 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);