在json.net中转换为DateTime

时间:2012-04-25 08:46:14

标签: c# .net json datetime json.net

我正在尝试反序列化以下内容:

{"ts":"2012-04-22 04:14:50,669", "msg":"Hello"}

public class LogEntry
{
    public DateTime Ts { get; set; }
    public string Msg { get; set; }
}
使用

var logEntry = JsonConvert.DeserializeObject<LogEntry>(line);

但是得到一个JsonSerializationException说“{”错误转换值\“2012-04-22 04:14:28,478 \”键入'System.DateTime'。第1行,第31位。“}。我无法更改日志格式。

我想我可能需要使用Converter自己解析日期字符串。但是,我找不到任何似乎相关的JsonConverter示例。具体来说,如何从reader方法中的ReadJson中读取值。

我应该看一下简单的例子吗?或者我是以错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:5)

DateTime字符串上的格式使用逗号作为小数点分隔符(,478)。您可以使用适当的JsonSerializerSettings初始化Culture对象(documented here),然后使用DeserializeObject<T>(value, settings)documented here)进行反序列化。这将使用您指定的文化而不是默认的InvariantCulture反序列化。

答案 1 :(得分:-1)

我怀疑问题是因为您获得的值是使用逗号作为小数点分隔符,这表示它是在使用逗号的语言环境中创建的(例如,除英语之外的许多欧洲语言)。您可以尝试更改您的区域设置以匹配,以便解析可以工作吗?