2012-03-31 65 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