如何使用Json数组和webrequest绘制折线图

8

首先,我对C#和Json都很陌生。

我想在C# GUI中从mysql表数据绘制图形。我编写了一个PHP文件来从mysql数据库表中选择数据,并使用echo json_encode(array("result"=>$result))将所选内容以json数组的形式输出。

以下是我的PHP代码:

<?php
define('HOST','*********************');
define('USER','*********************');
define('PASS','*********************');
define('DB','***********************');

if($_SERVER['REQUEST_METHOD']=='GET'){

 $start = $_GET['start'];
 $ending  = $_GET['ending'];
}

$con = mysqli_connect(HOST,USER,PASS,DB);


$sql = "SELECT * FROM table WHERE date_time BETWEEN '$start' and '$ending'" ;
$res = mysqli_query($con,$sql);

$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,array('id'=>$row[0],'p_pairs'=>$row[1],'temp1'=>$row[2]  ,'temp2'=>$row[3],'temp3'=>$row[4],'temp4'=>$row[5],'temp5'=>$row[6],'avg_current'=>$row[7],'avg_voltage'=>$row[8],'kw'=>$row[9],'kwh'=>$row[10]));
}

echo json_encode(array($result));

mysqli_close($con);

?>

使用这个链接,我可以清楚地看到日期时间间隔之间的JSON数组。我想要的只是用日期时间绘制温度值(temp1、temp2等)、P对值和其他内容的折线图以读取历史数据。
当我访问PHP页面时,我得到的只有:
[[{"id":"1","p_pairs":"0000-00-00 00:00:00","temp1":"2","temp2":"100","temp3":"100","temp4":"100","temp5":"100","avg_current":"100","avg_voltage":"300","kw":"300","kwh":"300"},{"id":"2","p_pairs":"0000-00-00 00:00:00","temp1":"45","temp2":"105","temp3":"230","temp4":"100","temp5":"2500","avg_current":"570","avg_voltage":"100","kw":"250","kwh":"1000"},{"id":"3","p_pairs":"2016-01-07 21:10:00","temp1":"45","temp2":"105","temp3":"230","temp4":"100","temp5":"2500","avg_current":"570","avg_voltage":"100","kw":"250","kwh":"1000"},{"id":"4","p_pairs":"2016-01-07 21:10:00","temp1":"45","temp2":"105","temp3":"230","temp4":"100","temp5":"2500","avg_current":"570","avg_voltage":"100","kw":"250","kwh":"1000"}]]

注意:这里设置了一些默认的日期时间。我只是想展示这个数组。正确的数组将完美地绘制图形。

我可以使用从C#发送的网络请求将这些数组作为字符串获取,使用下面的代码:

        System.Net.WebClient wc = new System.Net.WebClient();
        byte[] raw = wc.DownloadData("url to php");

        string webData = System.Text.Encoding.UTF8.GetString(raw);

如果有人能帮我在 C# GUI 中以日期时间为 x 轴,以 temp1、temp2 或 p_pairs 为 y 轴绘制线图,那将是很大的帮助......

这对我来说将是一个很大的帮助。在此先感谢你。


首先,您应该使用Newtonsoft的JSON.net将webData转换为可用的JSON对象。可以查阅一些相关教程来了解如何实现。 您想要生成什么?您是想生成带有图形的jpg或png文件吗?还是用于网站显示? - Nikhil
谢谢回复。我想在我的Winform UI中绘制它们。这是在反序列化和源到表格之后完成的。我目前的问题是,我有六个与上述相同的表格。我想绘制类似日期时间 vs temp1(table1),tamp1(table2),tamp1(table3),tamp1(table4),tamp1(table5),tamp1(table6)的线图。所有表格都在同一个数据库中,结构相同。 - Althaf
1
听起来你只需要一个绘图库。请看 https://code.msdn.microsoft.com/mschart。Infragistics、DevExpress和其他小部件制造商有其他工具可以创建图表。 - Nikhil
1个回答

1
首先获取一个可用的类。您可以从Json动态创建一个类。
如果您愿意依赖于System.Web.Helpers程序集,则可以使用Json类:
dynamic data = Json.Decode(json);

作为.NET 4框架的附加下载,它已包含在MVC框架中。或者使用NewtonSoft。
接下来获取一个图表组件:https://msdn.microsoft.com/en-us/library/dd489237.aspx并将数据绑定到图表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接