【发布时间】:2014-01-29 18:16:58
【问题描述】:
我正在尝试使用 Json.NET 序列化一些 Noda Time 值并且遇到了问题。序列化很简单:
LocalDateTime dt = ... // Assigned elsewhere
LocalDateTimePattern isoDateTimePattern = LocalDateTimePattern.GeneralIsoPattern;
JObject root = new JObject();
root.Add("time", isoDateTimePattern.Format(dt));
// Serialize other elements
using (var sw = new StreamWriter(stream)) {
serializer.Serialize(sw, root);
}
但是反序列化是有问题的。 Json.NET 似乎可以从上面识别 ISO 格式的日期和时间 并自动将其转换为 DateTime 对象,这不是我想要的。
using (var sr = new StreamReader(stream)) {
using (var jr = new JsonTextReader(sr)) {
var root = serializer.Deserialize<JObject>(jr);
// Deserialize other elements
var time = root.GetValue("time"); // time.Type is JTokenType.Date
string timeStr = time.Value<string>(); // Is "01/10/2014 10:37:32"
// Kaboom. String is not in the right format (see above comment)
var parsedTime = isoDateTimePattern.Parse(time.Value<string>());
}
}
从timeStr 以美国格式日期和时间出现的事实来看,我猜time.Value<string>()
只需在 Json.NET 已经解析的一些内部 DateTime 对象上调用 ToString。
我可以做类似的事情
var cdt = time.Value<DateTime>();
LocalDateTime ldt = new LocalDateTime(cdt.Year, cdt.Month, cdt.Day, cdt.Hour, cdt.Minute);
但这很复杂,意味着 Json.NET 正在执行不需要的转换。
有没有办法只获取 JSON 值的原始字符串值?
【问题讨论】:
标签: c# date datetime json.net nodatime