我正在尝试反序列化以下内容:
{"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
中读取值。
我应该看一下简单的例子吗?或者我是以错误的方式解决这个问题?
答案 0 :(得分:5)
DateTime字符串上的格式使用逗号作为小数点分隔符(,478
)。您可以使用适当的JsonSerializerSettings
初始化Culture
对象(documented here),然后使用DeserializeObject<T>(value, settings)
(documented here)进行反序列化。这将使用您指定的文化而不是默认的InvariantCulture
反序列化。
答案 1 :(得分:-1)
我怀疑问题是因为您获得的值是使用逗号作为小数点分隔符,这表示它是在使用逗号的语言环境中创建的(例如,除英语之外的许多欧洲语言)。您可以尝试更改您的区域设置以匹配,以便解析可以工作吗?