簡體   English   中英

將C#List轉換為JSON特定格式

[英]Converting C# List into JSON specific format

我的視圖中有一個圖形,如下所示:

  var hourlyGraph = Morris.Bar({
            element: 'graph_bar',
            data: [
               @foreach (var item in ViewBag.HourlyGraph)
               {
                @:{device: '@item.Hour.ToString("D2"):00', geekbench:@item.Sales },
               }
            ],
            xkey: 'device',
            ykeys: ['geekbench'],
            labels: ['Sold'],
            barRatio: 0.4,
            barColors: ['#0A4D70', '#34495E', '#ACADAC', '#3498DB'],
            xLabelAngle: 35,
            hideHover: 'auto',
            resize: true
      });

這是一張莫里斯圖。 請注意如何在此處設置數據:

[
@foreach (var item in ViewBag.HourlyGraph)
{
@:{device: '@item.Hour.ToString("D2"):00', geekbench:@item.Sales },
}
]

現在我需要用新數據填充圖表。 在我的Action中,我創建了一個包含2個屬性的列表:

public int Hour {get;set;}
public int Sales {get;set;}

它們存儲在以下類型的列表中:

var HourlyGraph = new List<HourlyGraph>();

現在我想將此列表轉換為JSON格式,如下所示:

[
{device: '0', geekbench:5 },
{device: '1', geekbench:13 },
{device: '2', geekbench:25 },
{device: '3', geekbench:14 },
{device: '4', geekbench:16 },
]

設備的價值是=小時,geekbench =銷售...

我怎么能在C#中做到這一點?

使用Json.Net和Linq很容易:

string myJson = 
   JsonConvert.SerializeObject(mylist.Select(item=>
                                  new {device=item.Hour, geekbench=item.Sales}));

您使用您想要的字段和名稱投影匿名類型,讓Newtonsoft.Json完成剩下的工作。

因為你正在使用mvc為什么不使用return Json()它會將object轉換為json字符串,你可以使用它

  public ActionResult Myaction()
    { 
        var HourlyGraph = new List<HourlyGraph>();


        return Json(HourlyGraph.Select(x => new {Hour=x.Hour,Sales=x.Sales }));
    }

您可以使用LINQ Anonymous Type實現所需的輸出

按照以下示例是類

public class HourlyGraph
{
    public int Hour { get; set; }
    public int Sales { get; set; }
}

導入命名空間System.Web.Script.Serialization ,它是Microsoft的Inbuilt類,用於處理JSON。 您需要使用“添加引用”引用名為System.Web.Extensions的其他程序集。

using System.Web.Script.Serialization;

聲明列表並轉換為自定義的JSON格式

        var listHourlyGraph = new List<HourlyGraph>();

        //Adding some Sample Values
        listHourlyGraph.Add(new HourlyGraph() { Hour = 0, Sales = 5 });
        listHourlyGraph.Add(new HourlyGraph() { Hour = 1, Sales = 10 });

        //Declaring JavaScriptSerialzer Object
        var serialzer = new JavaScriptSerializer();

        //Using Serialize Method which returns back a JSON String
        //We are using LINQ SELECT Method to create a new anonymous return type which contains our custom return types
        string s = serialzer.Serialize(listHourlyGraph.Select(x => new { device = x.Hour, geekbench = x.Sales } ));

您將在's'變量中獲得以下輸出

[{"device":0,"geekbench":5},{"device":1,"geekbench":10}]

注意: 如果要獲得性能優化,那么最好使用Newtonsoft JSON Library而不是Microsoft的Default JSON Library。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM