Данные в series

268
22 августа 2018, 21:10

Нашёл пример круговой диаграммы написанной на javascript на сайте HighCharts:

<script type="text/javascript">
    Highcharts.chart('container', {
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false,
            type: 'pie'
        },
        title: {
            text: 'Browser market shares in January, 2018'
        },
        tooltip: {
            pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: false
                },
                showInLegend: true
            }
        },
        series: [{
            name: 'Brands',
            colorByPoint: true,
            data: [{
                name: 'Chrome',
                y: 61.41,
                sliced: true,
                selected: true
            }, {
                name: 'Internet Explorer',
                y: 11.84
            }, {
                name: 'Firefox',
                y: 10.85
            }, {
                name: 'Edge',
                y: 4.67
            }, {
                name: 'Safari',
                y: 4.18
            }, {
                name: 'Other',
                y: 7.05
            }]
        }]
    });
</script>

А как мне сделать так что бы не писать на каждый новый элемент данные а сразу передать туда класс? Вот мои входные данные в контроллере которые на сайте в примерах используются для этой же диаграммы только без javascript а с использованием highcharts для dot.net

List<PieSeriesData> pieData = new List<PieSeriesData>();
            pieData.Add(new PieSeriesData { Name = "FireFox", Y = 45.0 });
            pieData.Add(new PieSeriesData { Name = "IE", Y = 26.8 });
            pieData.Add(new PieSeriesData { Name = "Chrome", Y = 12.8, Sliced = true, Selected = true });
            pieData.Add(new PieSeriesData { Name = "Safari", Y = 8.5 });
            pieData.Add(new PieSeriesData { Name = "Opera", Y = 6.2 });
            pieData.Add(new PieSeriesData { Name = "Others", Y = 0.7 });
            ViewData["pieData"] = pieData;
            return View();

И вот как я их пытаюсь подкинуть в данные series:

<script type="text/javascript">
    Highcharts.chart('container', {
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false,
            type: 'pie'
        },
        title: {
            text: 'Browser market shares in January, 2018'
        },
        tooltip: {
            pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: false
                },
                showInLegend: true
            }
        },
        series: [{
            name: 'Brands',
            colorByPoint: true,
            data: @Html.Raw(Json.Encode(ViewData["pieData"] as List<PieSeriesData>))
        }]
    });
</script>

Данные сериализуются, но почему то диаграмма не строится, а только шаблон для неё, что я делаю не так? Вот как она выглядит в таком случае:

Вот что находится на странице в data:

data: [{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"FireFox","Selected":false,"Sliced":null,"Y":45,"CustomFields":{}},{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"IE","Selected":false,"Sliced":null,"Y":26.8,"CustomFields":{}},{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"Chrome","Selected":true,"Sliced":true,"Y":12.8,"CustomFields":{}},{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"Safari","Selected":false,"Sliced":null,"Y":8.5,"CustomFields":{}},{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"Opera","Selected":false,"Sliced":null,"Y":6.2,"CustomFields":{}},{"ClassName":"","Color":"undefined","ColorIndex":null,"DataLabels":{"BackgroundColor":"","BorderColor":"undefined","BorderRadius":0,"BorderWidth":0,"ClassName":"","Color":"","ConnectorColor":"{point.color}","ConnectorPadding":5,"ConnectorWidth":1,"Crop":true,"Defer":true,"Distance":30,"Enabled":true,"Filter":{"Operator":"","Property":"","Value":null},"Format":"","Formatter":"","Inside":null,"Overflow":0,"Padding":"5","Rotation":0,"Shadow":{"Enabled":false,"Color":"","OffsetX":0,"OffsetY":0,"Opacity":0,"Width":0},"ShadowBool":null,"Shape":"square","SoftConnector":null,"Style":{"Color":"contrast","FontSize":"11px","FontWeight":"bold","TextOutline":"1px contrast"},"UseHTML":false,"VerticalAlign":2,"X":0,"Y":-6,"ZIndex":6},"Description":"undefined","Drilldown":"","Events":{"Click":"","MouseOut":"","MouseOver":"","Remove":"","Select":"","Unselect":"","Update":""},"Id":"null","Labelrank":null,"LegendIndex":null,"Name":"Others","Selected":false,"Sliced":null,"Y":0.7,"CustomFields":{}}]
Answer 1

Если вы не используете непосредственные классы библиотеки в контроллере, а просто хотите подготовить и сериализовать данные в JSON для последующей передачи в JS, то не используйте встроенные классы Highcharts.

Создайте простые анонимные объекты

List<object> pieData = new List<object>();
pieData.Add(new { name = "FireFox", y = 45.0 });
pieData.Add(new { name = "IE", y = 26.8 }); 

Обратите внимание на регистр названий полей.

в представлении кастинг as List<PieSeriesData также следует убрать.

READ ALSO
Как Показать/скрыть div при выборе radio?

Как Показать/скрыть div при выборе radio?

Есть 2 radio "частное лицо" и "фирма"При выборе "фирма" мне надо показать поле для заполнения, а при выборе "частное лицо" это поле скрыть

232
Как убрать названия улиц с гугл maps API?

Как убрать названия улиц с гугл maps API?

У гугл карты АПИ есть свойство styles куда передаётся массив с объектами свойствЕсть ли такое свойство убирающее названия улиц с карты? помогите...

203
массивы в javascript node js. как работать с { }

массивы в javascript node js. как работать с { }

впервые столкнулся с такой проблемой) просто не могу правильно вытащить данные из массива; если до этого массивы у меня всегда выглядели

212
фильтрация массива JavaScript

фильтрация массива JavaScript

как отфильтровать один массив по значениям другого и не используемые значения вывести в другой массив - задача с codewars

305