【发布时间】:2012-11-21 00:30:53
【问题描述】:
我想解析 JSON 字符串并使用 token.Type 属性来检测 JTokenType.TimeSpan 类型的值。
我不知道如何在我的输入字符串中表达 TimeSpan,一切似乎都被解释为 JTokenType.String。
var timeSpanString = TimeSpan.FromHours(1).ToString();
testString = string.Format(@"{{""Value"": ""{0}"" }}", timeSpanString);
var statObject = JObject.Parse(testString);
JToken token = statObject["Value"];
var tokenValue = token.ToString();
var tokenType = token.Type; // JTokenType.String
我什至尝试过:
JValue jValue = new JValue("test");
jValue.Value = TimeSpan.FromHours(1);
bool isTimeSpan = jValue.Type == JTokenType.TimeSpan; // true!
testString = string.Format(@"{{""Value"": ""{0}"" }}", jValue.Value);
var statObject = JObject.Parse(testString);
JToken token = statObject["Value"];
var tokenValue = token.ToString();
var tokenType = token.Type; // JTokenType.String
这至少产生了一个tokenType JTokenType.TimeSpan的JValue对象,但在我解析它时仍然显示为一个JTokenType.String。
这非常适用于 DateTime 对象。
如何表达输入字符串,使得解析值类型为JTokenType.TimeSpan?
【问题讨论】:
-
您是在寻找具有特定结构的处理输入,还是想要在 Json 块中查找时间跨度的任何实例?
-
不确定您所说的“某种结构”是什么意思。输入将是一个 JSON 字符串,其中包含一个值,该值可以是多种类型之一:字符串、日期时间、时间跨度等。
-
var json = JsonConvert.SerializeObject(TimeSpan.FromHours(1)); var ts = JsonConvert.DeserializeObject<TimeSpan>(json); -
@L.B - 这并没有真正的帮助。我需要知道如何格式化输入字符串,以便解析器将此字符串转换为 JObject,其中包含类型为 JTokenType.TimeSpan 的 JValue 令牌
-
@sd 序列化程序的存在是为了向您隐藏这些细节。请重新考虑一下。
标签: c# .net json json.net timespan