C# JSON.NET干扰MSChart日期 问题

C# JSON.NET干扰MSChart日期 问题,c#,multithreading,json.net,mschart,C#,Multithreading,Json.net,Mschart,我遇到了一个问题,用json.net反序列化任何值(甚至是伪值)似乎会弄乱mschart控件x轴上的日期。这是一个应该沿x轴具有日期值的图表: 坏的=== 该图表由以下最小代码生成: using System.Windows.Forms.DataVisualization.Charting; using System.Threading; using Newtonsoft.Json; public partial class Form1 : Form { Thread thread;

我遇到了一个问题,用json.net反序列化任何值(甚至是伪值)似乎会弄乱mschart控件x轴上的日期。这是一个应该沿x轴具有日期值的图表:

坏的===

该图表由以下最小代码生成:

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);
            });
        }
    }
}

问题仍然存在。我想也许我修改图表太早了。但是现在,我不知道该怎么做。

我查看了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);
系列=新系列(“水位”);
series.ChartArea=area.Name;

series.XValueType=ChartValueType.DateTime;/*我怀疑这在某种程度上破坏了你的文化。在json.net调用之前和之后,
CultureInfo.CurrentCulture
的值是多少?在调用之前和之后都是“en-US”,我也可以复制它。非常奇怪。这很好。那么这不是一个本地问题,我不认为这个问题是由json.net引起的。我只是用我自己的json解析器尝试了一下,同样的事情也发生了
Thread.Sleep(5000);
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);