将JSON数据从C#中的asp.net MVC控制器发送到highcharts pie
本文关键字:控制器 pie highcharts MVC net 数据 JSON asp 中的 | 更新日期: 2023-09-27 17:58:24
我想从C#中的asp.net MVC控制器发送json数据,并使用这些数据绘制一个高图表饼图。
所以现在我用这个:
Dictionary<string, double> result = new Dictionary<string, double>();
result.Add("test1", 45);
result.Add("test2", 64);
var jsonResult = Json(new
{
graphDivId = "divGraph",
legend = "A legend",
stats = result ,
});
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonResult;
但是当我在jquery中通过ajax调用接收数据时,我得到了以下信息:
stats:[{"Key":"test1","Value":45},{"Key":"test2","Value":64}]
但我需要这个:
stats:[["test1",45],["test2",64]]
有什么想法吗?
今天早上我有点玩这个,我想出了下面的东西——但它不起作用,因为你会得到[{x:"testx",y:60}…]。所以这不好。不过,您可能可以使用它并覆盖SimpleClass上的ToJSON方法。
我的另一个想法(我不确定它是否可行)是收集ArrayList的。由于ArrayList不是强类型,因此可以为其添加字符串和double属性。
让我知道结果如何。
如果你使用了一个简单对象列表,会怎么样。您可以使用键值对或其他现有类。但是您可以创建一个简单的类来保存您的数据。
class SimpleClass{
public int x{set; get;}
public double y{set; get;}
}
var results = new List<SimpleClass>();
results.Add(new SimpleClass{x="test3", y=42});
results.Add(new SimpleClass{x="test2", y=99});
完美的ek_ny!
多亏了你的帮助,我发现了如何在没有特定课程的情况下也能做到:
var results = new List<List<object>>();
results.Add(new List<object>(new object[]{"test1", 45}));
results.Add(new List<object>(new object[]{"test2", 99}));
还有一件事很高兴知道。
highchartsseries.data是一个点对象,您可以在C#中用它来表示:
class HighChartsPoint
{
public double x {set; get;}
public double y {set; get;}
public string color {set; get;}
//public HighChartsEvent events{set; get;}
public string id {set; get;}
//public HighChartsMarker marker {set; get;}
public string name {set; get;}
public bool sliced {set; get;}
}
参考:http://www.highcharts.com/ref/#point
ekny类是点对象表示的一部分。事件和标记被注释,因为它是另一个要编写的类。它的代表就在那里:
事件:http://www.highcharts.com/ref/#point-事件
标记:http://www.highcharts.com/ref/#point-标记
所以现在你可以这样使用它:
var results = new List<HighChartsPoint>();
results.Add(new HighChartsPoint {
name="test3",
y=42,
color="red",
id="someid",
sliced=false
});
var jsonResult = Json(results);
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonResult;
希望它能帮助。。。
以防万一。如果值设置为null,则Highcharts无法显示图表。asp.net mvc控件类的Json方法不能过滤空值。
为此,您可以使用json.net库并创建一个JsonNetResult(从ActionResult继承):
public class JsonNetResult : ActionResult
{
public Encoding ContentEncoding { get; set; }
public string ContentType { get; set; }
public object Data { get; set; }
public JsonSerializerSettings SerializerSettings { get; set; }
public Formatting Formatting { get; set; }
public JsonNetResult()
{
SerializerSettings = new JsonSerializerSettings();
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty(ContentType)
? ContentType
: "application/json";
if (ContentEncoding != null)
response.ContentEncoding = ContentEncoding;
if (Data != null)
{
JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting };
JsonSerializer serializer = JsonSerializer.Create(SerializerSettings);
serializer.Serialize(writer, Data);
writer.Flush();
}
}
}
然后将此方法添加到您的控制器中,以取代asp.net mvc的Json方法:
protected JsonNetResult JsonNet(object data, bool needDefaultSettings)
{
var result = new JsonNetResult();
result.Data = data;
if (needDefaultSettings)
{
var defaultSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
};
result.SerializerSettings = defaultSettings;
}
return result;
}
所以现在你可以在你的控制器操作中使用它了:
public JsonNetResult MyAction()
{
MyClass myObject = new MyClass();
return JsonNet(myObject);
}
啊,还有一件事,不要犹豫,在MyClass属性上使用Json.Net DefaultValue属性:
[DefaultValue(null)]