【问题标题】:To create json format using C#使用 C# 创建 json 格式
【发布时间】:2017-04-23 18:45:33
【问题描述】:

嗨,在下面的代码中,我尝试使用 C# 动态创建 json 并将其作为 json 对象传递给客户端。我无法根据下面的静态 json 获得准确的 json 格式。请您帮我解决这个问题。我的目标是使用 C# 获得准确的 json 格式。

确切的 Json 格式:

{
    "chart": {
        "caption": "Quarterly Sales vs. Profit % in Last Year",
        "subcaption": "Product-wise Break-up - Harry's SuperMart",
        "xAxisName": "Quarter",
        "pYAxisName": "Sales",
        "sYAxisName": "Profit %",
        "numberPrefix": "$",
        "numbersuffix": "M",
        "sNumberSuffix": "%",
        "sYAxisMaxValue": "25",
        "paletteColors": "#5598c3,#2785c3,#31cc77,#1aaf5d,#f45b00",
        "baseFontColor": "#333333",
        "baseFont": "Helvetica Neue,Arial",
        "captionFontSize": "14",
        "subcaptionFontSize": "14",
        "subcaptionFontBold": "0",
        "showBorder": "0",
        "bgColor": "#ffffff",
        "showShadow": "0",
        "canvasBgColor": "#ffffff",
        "canvasBorderAlpha": "0",
        "divlineAlpha": "100",
        "divlineColor": "#999999",
        "divlineThickness": "1",
        "divLineDashed": "1",
        "divLineDashLen": "1",
        "usePlotGradientColor": "0",
        "showplotborder": "0",
        "valueFontColor": "#ffffff",
        "placeValuesInside": "1",
        "showXAxisLine": "1",
        "xAxisLineThickness": "1",
        "xAxisLineColor": "#999999",
        "showAlternateHGridColor": "0",
        "legendBgAlpha": "0",
        "legendBorderAlpha": "0",
        "legendShadow": "0",
        "legendItemFontSize": "10",
        "legendItemFontColor": "#666666"
    },
    "categories": [
        {
            "category": [
                {
                    "label": "Q1"
                }
            ]
        }
    ],
    "dataset": [
        {
            "dataset": [
                {
                    "seriesname": "Processed Food",
                    "data": [
                        {
                            "value": "30"
                        }
                    ]
                },
                {
                    "seriesname": "Un-Processed Food",
                    "data": [
                        {
                            "value": "21"
                        }
                    ]
                }
            ]
        },
        {
            "dataset": [
                {
                    "seriesname": "Electronics",
                    "data": [
                        {
                            "value": "27"
                        }
                    ]
                },
                {
                    "seriesname": "Apparels",
                    "data": [
                        {
                            "value": "17"
                        }
                    ]
                }
            ]
        }
    ],
    "lineset": [
        {
            "seriesname": "Profit %",
            "showValues": "0",
            "data": [
                {
                    "value": "14"
                }
            ]
        }
    ]
}

C#:

 object[,] arrData = new object[2, 3];


          arrData[0, 0] = "Product A";

          arrData[0, 1] = 567500;

          arrData[0, 2] = 567500;

          StringBuilder jsonData = new StringBuilder();

              StringBuilder categories = new StringBuilder();

          StringBuilder currentYear = new StringBuilder();

          StringBuilder lineset = new StringBuilder();


          jsonData.Append("{" +

      //Initialize the chart object with the chart-level attributes..
              "'chart': {"+

                  "'caption': 'Sales by Product'," +
                  "'numberPrefix': '$',"+
                  "'formatNumberScale': '1'," +
                  "'placeValuesInside': '1'," +
                  "'decimals': '0'" +
              "},");


          categories.Append("'categories': [" +
              "{" +
                  "'category': [");



          currentYear.Append("{" +

                      "'seriesname': 'Current Year'," +
                      "'data': [");

          lineset.Append("'lineset': [" +
          "{" 
             );

          lineset.Append("{" +

                  "'seriesname': 'Current Year'," +
                  "'seriesname': 'Current Year'," +
                  "'data': [");
          for (int i = 0; i < arrData.GetLength(0); i++)
          {
              if (i > 0)
              {
                  categories.Append(",");
                  currentYear.Append(",");

              }
              categories.AppendFormat("{{" +

                      "'label': '{0}'" +
                  "}}", arrData[i, 0]);
              currentYear.AppendFormat("{{" +

                      "'value': '{0}'" +
                  "}}", arrData[i, 1]);

              lineset.AppendFormat("{{" +
                  // data level attributes
                     "'value': '{0}'" +
                 "}}", arrData[i, 2]);

          }


          categories.Append("]" +
                  "}" +
              "],");



          currentYear.Append("]" +
                  "}");

          jsonData.Append(categories.ToString());
          jsonData.Append("'dataset': [{");
          jsonData.Append("'dataset': [");
          jsonData.Append(currentYear.ToString());

          jsonData.Append("]" +
                  "}");
          jsonData.Append(lineset.ToString());
          jsonData.Append("}" +
               "]");


          return jsonData.ToString();

【问题讨论】:

  • 提供一个最小的可重现示例。
  • 使用 Json 库,例如 nuget.org/packages/newtonsoft.json 来创建它。比使用字符串操作更可靠。
  • @JeroenHeier 查看我的编辑
  • 这里可以使用Json.Net newtonsoft.com/json
  • 从 nuget 包中添加 Newtonsoft json 或 json.net。这些是更好的解决方案。

标签: c# json


【解决方案1】:

使用我的回答 here 从 JSON 创建一个 C# 类。然后创建该类的一个实例并用如下数据填充它:

var data = new WhateverYourClass();
// fill the properties

然后使用NewtonSoft NuGet 包并执行此操作将您的类实例转换为 JSON(序列化):

string json = JsonConvert.SerializeObject(data);

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2015-10-25
    • 2017-01-19
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多