How can I make JsonResult return an array of array

2019-05-07 00:58发布

问题:

I have an IEnumerable list of date/value pairs that I am returning as a Json list to flot. However, when I call JsonResult(), the result looks like this:

[{"Date":date1, "Value":value1}, {"Date":date2, "Value":value2}...]

Flot is expecting

[[date1, value1], [date2, value2]...]

Is there any simple way to get the MVC framework to output objects like this or do I need to write my own seralizer / StringBuffer code? For that matter I don't even need to output the field names, just the values themselves.

回答1:

It sounds like you just need to return a string like this:

var builder = new StringBuilder();
builder.Append("[");
foreach (var item in listOfDateTimes)
    builder.AppendFormat("[{0}, {1}], ", item.Key, item.Value);
var result = builder.ToString().TrimEnd(new char[]{',',' '}) + "]";
return result;


回答2:

Are these date/value pairs type of System.Web.UI.Pair? If so, you can do this ;

return Json(yourIEnumerable.Select(x => new[] { x.First, x.Second }).ToArray());

It returns the way you want it to be ;

[["\/Date(1255686550232)\/","foo"],["\/Date(1255686550232)\/","bar"]]

Even if they're not type of System.Web.UI.Pair, I'm sure you get the idea.



回答3:

Your best bet is to write it yourself, but it is a trivial exercise to do.

In my mind, is it worth spending on hour looking for a way to do it, when you can spend 10 minutes and just do the serialization yourself.