zoukankan      html  css  js  c++  java
  • 用C#构造HighChart类库,把数据转换成JSON第一阶段失败告终

         最近在做项目,用到了HighChart,主要用于图表展现,深入了解时,发现HighCHart数据格式是JSON,就想用C#构造一个JSON类库,这样方便数据在后台传递,有了这个想法,就开始行了,结果发现,困难重重,没有想想的哪么简单。

         目前开发状况,基本的数据传递都可以实现了,但是在开始开发的时候没有进行合理规划,每个类都是和API一样,这样造成了类的不能重用,维护成本更高,举个简单的例子,在API里面有YAsxis和XAxis两个对象,目前的做法是把他们当做两个对象来操作,没有基本,其实这两个对象里面的属性基本上是一样的,在这里面添加后,还要在另一个里面添加,这样增加了开发成本,同时也增加了维护成本,与此同时,最近也在深入了解一些基础知识,比如 抽象类与接口值类型与引用类型,之后发现自己的设计太差,如果继续开发下去,后面的问题会更多,最终选择放弃开发,重新设计后,再开发。

          通过对抽象类的了解后,上面有关YAsxis和XAxis两个对象,如何设计已经很明确了,可以把Axis做为基本,之后YAxis和XAxis继承Axis,这样设计避免重复的属性在多个类中实现。

         写这篇文章的主要原因是,基础知识目前还有欠缺,在实际的项目开发当中,一般不用到抽象类、接口、值与引用类型,但是这都是基础,如果不明天他们的差别,在项目开发过程中一但遇到,就会有不必要的问题出现,以前自己水平有限,对这些基础理解不了,但是在找工作时,面试人员都会问到这些基础,所以在面试前就把这些东西哪出来背一下,应付一下面试,(自己在想,反正在开发过程当中用不到,应付一下就可以了)随着开发经验的增加,开始重视这方面的基础了,发现在做设计时,如果设计不好,会给开发带来很多问题,目前这个HighChart类库开发,就已经证明这一点了,好的设计更容易开发与维护。

         简单的基础知识,对于初学者来说还是有一点难度的,难在于如何运用,当初我学习的时候,感觉很简单,但是就是记不住,主要原因是不知道如何运用,目前再次深入研究时,才发现原来是这个道理啊,当你知道用到何处时,他将会变得很简单。

        说了很多一直没有讲自己写的类库,现在给大家分享一下类库

        

    类库没有基类,这样对于维护很不好,原因请自己深入了解一下抽象类

    下面是批处理文件,构造数据源,用于Jquery的Ajax调用

    下面看一下Column_Basic的代码

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using T.HighCharts;
    using Newtonsoft.Json;
    
    namespace WebApp.Handler
    {
        /// <summary>
        /// Column_Basic 的摘要说明
        /// </summary>
        public class Column_Basic : IHttpHandler
        {
            private DataLables _dataLables;
            public void ProcessRequest(HttpContext context)
            {
                #region Chart
                Chart chart = new Chart();
                chart.type = ChartType.column.ToString();
                chart.marginRight = 150;
                #endregion
    
                #region Title
                Title title = new Title();
                title.text = "Column Basic";
                #endregion
    
                #region SubTitle
                SubTitle subTitle = new SubTitle();
                subTitle.text = "SubTitle:Column";
                #endregion
    
                #region XAxis
                XAxis xAxis = new XAxis();
                xAxis.categories = SetXAxisCategory();
    
                #endregion
    
                #region YAxis
                YAxis yAxis = new YAxis();
                YAxisTitle yAxisTitle = new YAxisTitle();
                yAxisTitle.text = "Rainfall (mm)";
                yAxis.min = 0;
                yAxis.title = yAxisTitle;
                #endregion
    
                #region ToolTip
                ToolTip toolTip = new ToolTip();
                toolTip.formatter = "";
                #endregion
    
                #region Series
                List<Series> seriesList = new List<Series>();
                Series series = new Series();
                _dataLables=new DataLables();
                //_dataLables.enabled = true;
                series.name = "Tokyo";
                series.data = SetSeriesData();
                //series.dataLabels = _dataLables;
                seriesList.Add(series);
    
                series = new Series();
                series.name = "New York";
                series.data = SetSeriesData();
                //series.dataLabels = _dataLables;
                seriesList.Add(series);
    
                series = new Series();
                series.name = "London";
                series.data = SetSeriesData();
                //series.dataLabels = _dataLables;
                seriesList.Add(series);
                #endregion
    
                #region Legend
                Legend legend = new Legend();
                legend.align = "right";
                legend.verticalAlign = "middle";
                legend.layout = "vertical";
                legend.enabled = true;
                #endregion
    
                #region PlotOptions
    
                PlotOptions plotOptions = new PlotOptions();
                PlotOptionsPoint plotOptionsPoint = new PlotOptionsPoint();
                PlotOptionsEvents events = new PlotOptionsEvents();
                plotOptionsPoint.events = events;
    
                _dataLables = new DataLables();
                _dataLables.enabled = false;
                _dataLables.color = Colors.color[2];
    
                PlotOptionsColumn plotOptionsColumn = new PlotOptionsColumn();
                plotOptions.column = plotOptionsColumn;
                plotOptionsColumn.borderWidth = 0;
                plotOptionsColumn.pointPadding = 0.2;
                plotOptionsColumn.point = plotOptionsPoint;
                plotOptionsColumn.dataLabels = _dataLables;
                #endregion
    
                #region Credits
                Credits credits=new Credits();
                credits.text = "一统";
                credits.href = "http://www.cnblogs.com/fengger";
                #endregion
    
                #region HighChart
                HighChart hc = new HighChart();
                hc.chart = chart;
                hc.title = title;
                hc.subtitle = subTitle;
                hc.tooltip = toolTip;
                hc.xAxis = xAxis;
                hc.yAxis = yAxis;
                hc.series = seriesList;
                hc.legend = legend;
                hc.plotOptions = plotOptions;
                //hc.credits = credits;
                #endregion
    
                string output = JsonConvert.SerializeObject(hc, Formatting.None);
                context.Response.ContentType = "text/plain";
                context.Response.Write(output);
                context.Response.End();
            }
    
            #region XAxis Category
            private List<string> SetXAxisCategory()
            {
                List<string> list = new List<string>();
                list.Add("Jan");
                list.Add("Feb");
                list.Add("Mar");
                list.Add("Apr");
                list.Add("May");
                list.Add("Jun");
                list.Add("Jul");
                list.Add("Aug");
                list.Add("Sep");
                list.Add("Oct");
                list.Add("Nov");
                list.Add("Dec");
                return list;
            }
            #endregion
    
            #region Series Data
            Random r = new Random();
            private List<SeriesData> SetSeriesData()
            {
                List<SeriesData> dataList = new List<SeriesData>();
                SeriesData data;
                for (int i = 0; i < 12; i++)
                {
                    data = new SeriesData();
                    data.y = Math.Ceiling(r.NextDouble() * 100);
                    dataList.Add(data);
                }
                return dataList;
            }
            #endregion
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    下面介绍一下如何在HTML页面里面如何通过Jquery调用.ashx里面的返回数据,在调用方法前要引用Hightchart.js与Jquery.js

    详细代码如下:

    View Code
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Column Basic</title>
        <script src="js/jquery-mini-1.7.1.js" type="text/javascript"></script>
        <script src="js/highcharts.js" type="text/javascript"></script>
        <script src="js/modules/exporting.js" type="text/javascript"></script>
        <script language="javascript" type="text/javascript">
            $(function () {
                var chartBar;
                $(document).ready(function () {
                    $.ajax({
                        type: 'post',
                        cache: false,
                        dataType: 'json',
                        url: '../Handler/Column_Basic.ashx',
                        success: function (result) {
                            //ToolTip formatter
                            result.tooltip.formatter = function () {
                                return '' + this.x + ': ' + this.y + ' mm';
                            }
                            result.subtitle.text = result.series[0].data[0].y;
    
                            chartBar = new Highcharts.Chart(result);
                        },
                        error: function () {
    
                        },
                        beforeSend: function () {
    
                        },
                        complete: function () {
    
                        }
                    });
                })
            })
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div id="Container">
            
        </div>
        </form>
    </body>
    </html>

    效果图,更多效果图,请去官方网站对了解

       最后,要告诉哪些像我一样,不注重基础知识的兄弟们,好好的学习一下基础知识,这次学习要用心,毕竟不是刚毕业的学生了,为了发展的更好,为了......好好深入学习一下基础知识,当你认真时,会有意想不到的收获,如果还是没有任何收获有两种可能,其一:已经非常熟悉了,哪也就没有必要再学习了,其二:就是说明你还不够认真。

  • 相关阅读:
    spring boot项目接入xxl-job
    Vue3 目录结构
    [原创]阿里全链路压测学习及理解
    python测试开发django-107.form组件widgets(radio/checkbox/单选多选下拉框/日历控件)
    ubuntu通过nginx部署fastcgi程序
    fastcgi
    fpc protobuf开源框架
    delphi jwt
    JWT
    google protobuf经验
  • 原文地址:https://www.cnblogs.com/Fengger/p/2591565.html
Copyright © 2011-2022 走看看