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”时出错
- 编辑-
提前感谢如果您使用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。