2014-09-03 6 views
2

Проблемы

я столкнулся с проблемой, когда десериализации любого значения с Json.NET (даже фиктивными ценностями), кажется, запутались даты вдоль оси х моего контроля MSChart , это график, который, как предполагается, имеет значение даты по оси х:JSON.NET мешая MSChart даты

=== плохо ===

enter image description here

график производятся следующим минимальным код:

using System.Windows.Forms.DataVisualization.Charting; 
using System.Threading; 
using Newtonsoft.Json; 

public partial class Form1 : Form 
{ 
    Thread thread; 

    public Form1() 
    { 
     InitializeComponent(); 

     chart1.Dock = DockStyle.Fill; 

     thread = new Thread(Plot); 
     thread.Start(); 
    } 

    void Plot() 
    { 
     // prepare chart 
     chart1.Invoke((MethodInvoker)delegate 
     { 
      chart1.ChartAreas.Clear(); 
      chart1.Series.Clear(); 

      ChartArea area = new ChartArea(); 
      chart1.ChartAreas.Add(area); 

      Series series = new Series("water level"); 
      series.ChartArea = area.Name; 
      series.ChartType = SeriesChartType.Line; 
      chart1.Series.Add(series); 
     }); 

     // plot line by adding 2 points: ((time)0, 0) and ((time)1, 1) 
     for (int i = 0; i < 2; i++) 
     { 
      object dummy = JsonConvert.DeserializeObject<object>("null"); 

      chart1.Invoke((MethodInvoker)delegate 
      { 
       DateTime time = new DateTime(1970, 1, 1, 0, 0, i, DateTimeKind.Utc); 

       chart1.Series["water level"].Points.AddXY(time, i); 
      }); 
     } 
    } 
} 

закомментировав только Json.NET линию следующих результатов строки в ожидаемом результате:

object dummy = JsonConvert.DeserializeObject<object>("null"); 

=== хорошо ===

enter image description here

Вопрос

там что-то случилось с моим кодом?

Update

я просто заменил заинтересованную линию

Thread.Sleep(5000); 

и проблема все еще происходит. Я подумал, что, возможно, я слишком рано меняю диаграмму. но теперь я не уверен, что с этим делать.

+0

Я подозреваю, что это в какой-то степени прикручивает вашу культуру. Какова ценность 'CultureInfo.CurrentCulture' до и после вызова json.net? – Sign

+0

это «en-US» до и после – symbiont

+0

Я тоже могу воспроизвести это. Очень странно. –

ответ

0

Я просмотрел свойства объекта Series и увидел, что для параметра XValueType установлено значение «Double». поэтому я попытался явно установить его в «DateTime» при его создании, и решить эту проблему:

Series series = new Series("water level"); 
series.ChartArea = area.Name; 
series.XValueType = ChartValueType.DateTime; /* <---- added this line */ 
series.ChartType = SeriesChartType.Line; 
chart1.Series.Add(series); 

он установлен на «Auto» по умолчанию, что appareantly не всегда приготовьтесь к «DateTime». я думаю, я должен был посмотреть на свойства намного раньше.

Это по-прежнему странная проблема для меня, и я понятия не имею, что ее вызывает, поэтому это более обходное решение.

Смежные вопросы