2012-03-31 61 views
0

我正在尝试创建股票图表HighStock library。要用数据填充图表,他们的示例指定了this source。第一个参数是以毫秒为单位的unixtime,第二个参数是股票收盘价。我不知道这是否是有效的json,但我会争辩说以下将是一种更合适的json编写方式。C#JSON序列号

[{"Closing":63.15000,"Date":1262559600000},{"Closing":64.75000,"Date":1262646000000}, ... 

我想我没有别的选择,只能适应HighStocks语法。我可以通过循环来解决这个问题,并为字符串添加正确的语法,但这似乎很简单。序列化C#对象来创建我的JSON会更明智吗?如果是这种情况 - 我如何才能达到示例中指定的语法?

就让我们说,这是我的C#对象:

public class Quote { 
    public double Date { get; set; } 
    public decimal Closing { get; set; } 
} 

上午我因此无需复杂吗?我应该只格式化json字符串吗?

回答

3

他们正在寻找的格式是有效的JSON。它是一个数组数组。

var item1 = new[] { 1, 2 }; 
var item2 = new[] { 3, 4 }; 
var itemArray = new[] { item1, item2 }; 

itemArray将序列化到[ [1, 2], [3, 4] ]

你应该能够保留你现有的类,并使其成为一个序列化问题。

例如,在一个MVC应用程序,你可以有:

public ActionResult Quotes() { 
    var quotes = service.GetQuotes(); //IEnumerable<Quote> 
    return Json(quotes.Select(x=>new[] { EpochMillis(x.Date), (double)x.Closing }).ToArray()); 
} 

private double EpochMillis(DateTime date) 
{ 
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    TimeSpan diff = date - origin; 
    return Math.Floor(diff.TotalMilliseconds); 
} 
+0

你 - 先生 - 太棒了!谢谢! – 2012-03-31 20:42:47

0

第一次看,我会说,用[]代替{}以获得基本格式。之后,您可能会删除标签(您的有效JSON)以获得最终结果。

我不会建议使用它不支持在所有正式JSON标准库...

尝试其他的库一样的Infragistics或C1 - 他们都相当不错!

问候,

+0

好吧,但是连载 - >字符串替换 - >输出似乎是一个几乎同样糟糕的解决方案......也许。但是,我不喜欢它。 – 2012-03-31 16:46:37

+0

当然你不喜欢那样。这是一个糟糕的,质量不高的方式。图书馆开发人员应该始终支持官方标准,而不是“homebrewn ...” – 2012-03-31 16:57:49

+0

是的,你是对的......他们支持标准是件好事。 – 2012-03-31 17:02:34