C # JSON сериализация - PullRequest
0 голосов
/ 31 марта 2012

Я пробую библиотеку HighStock для создания биржевых диаграмм. Чтобы заполнить диаграмму данными, в их примере указывается этот источник . Первый параметр - unixtime в миллисекундах, а второй параметр - цена закрытия акции. Я не знаю, является ли это действительным json, но я бы сказал, что следующий способ будет более подходящим для написания 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?

Ответы [ 2 ]

3 голосов
/ 31 марта 2012

Формат, который они ищут, является действительным 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 голосов
/ 31 марта 2012

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

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

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

Привет,

...