0

我正在开发使用 Web API 调用的 Windows Phone 应用程序。大多数调用都返回 JSON 字符串,但其中一个返回以下代码行:

var buyPrice=[[Date.UTC(2012,0,9),385.250000], [Date.UTC(2012,0,10),386.250000], [Date.UTC(2012,0,11),387.000000]];

似乎上面提到的代码行是 JavaScript 集合的常规声明。这确实意味着我无法将其解析为 JSON,而且它包含一个单词

"var 购买价格="

也无法解析。

所以我需要将上述集合转换为相应的 C# 数组/集合,但不确定我是否能够做到这一点。

是否可以通过使用 C# 功能来做到这一点,或者我需要一些第三方库?

4

1 回答 1

1

如果没有外部库(而且我不知道任何此类任务),您可以使用Regex

var input = "var buyPrice=[[Date.UTC(2012,0,9),385.250000], [Date.UTC(2012,0,10),386.250000], [Date.UTC(2012,0,11),387.000000]];"

var regex = @"\[Date.UTC\((?<year>\d{4}),(?<month>\d{1,2}),(?<day>\d{1,2})\),(?<price>\d+(\.\d+)?)]";

var matches = Regex.Matches(input, regex)
                   .OfType<Match>()
                   .Select(m => new
                       {
                           Date = new DateTime(
                               Int32.Parse(m.Groups["year"].Value),
                               Int32.Parse(m.Groups["month"].Value) + 1,
                               Int32.Parse(m.Groups["day"].Value)
                           ),
                           Price = Decimal.Parse(m.Groups["price"].Value)
                       });

因为Date.UTC 从 0 开始需要一个月,所以您必须添加一个。根据您的输入,这将返回三个具有 aDatetime Datedecimal Price属性的匿名对象。

请注意,此 Regex 不会尝试验证输入(月份和日期 00-99 有效),但它是一个很好的起点。

于 2013-07-09T12:39:00.823 回答