2012-03-31 3 views
0

Я пытаюсь создать HighStock library для создания биржевых диаграмм. Чтобы заполнить таблицу данными, их пример указывает this source. Первый параметр - unixtime в миллисекундах, а вторым параметром является цена закрытия акций. Я не знаю, действительно ли это json, но я бы сказал, что следующее было бы более подходящим способом написания json.C# JSON serialization

[{"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; } 
} 

Am I делает ненужным сложный? Должен ли я просто форматировать строку 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

Вы - сэр - это потрясающе! Благодаря! –

0

При первом взгляде, я бы сказал, заменим {} на [], чтобы получить базовый формат. Впоследствии вы, вероятно, можете удалить ярлыки (вашего действительного JSON), чтобы получить окончательный результат.

Я бы не рекомендовал использовать библиотеку, которая не поддерживает официальный стандарт JSon на все ...

Попробуйте другой LIBS как Infragistics или C1 - они очень хороши!

Привет,

+0

Хорошо ... но сериализации -> строка замены -> выход кажется, что почти одинаково плохое решение ... возможно. Однако мне это не нравится. –

+0

Конечно, вам это не нравится. Это плохой и менее качественный способ сделать это. Разработчик библиотеки всегда должен поддерживать официальные стандарты, а не что-то «homebrewn ...» –

+0

Да, вы правы ... хорошо, что они поддерживают стандарты. –