2009-10-15 16 views
4

J'ai une liste IEnumerable de paires date/valeur que je retourne en tant que liste Json à flotter. Cependant, quand je l'appelle JsonResult(), le résultat ressemble à ceci:Comment puis-je faire en sorte que JsonResult retourne un tableau de tableaux (sans noms de champs) plutôt qu'un tableau d'objets?

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

Flot attend

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

est-il un moyen simple d'obtenir le framework MVC aux objets de sortie comme ceci ou dois-je besoin d'écrire mon propre code seralizer/StringBuffer? D'ailleurs je n'ai même pas besoin de sortir les noms de champs, juste les valeurs elles-mêmes.

Répondre

1

Il semble que vous avez juste besoin de retourner une chaîne comme ceci:

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; 
+0

builder.AppendFormat au cas où quelqu'un essaye de copier/coller ce code plus tard :) – Jedidja

+0

@jedidja Merci pour la capture, mon code de l'air n'est jamais parfait = P – Joseph

+1

Aussi pour référence future, j'ai fini par retourner ContentResult de la méthode. Essayer de retourner Json() d'une chaîne le laisse entre guillemets et flot cherche un tableau. return Content (résultat, "json") – Jedidja

1

Votre meilleur pari est de l'écrire vous-même, mais c'est un exercice trivial à faire. Dans mon esprit, est-ce que ça vaut la peine de passer une heure à la recherche d'une façon de le faire, quand vous pouvez passer 10 minutes et juste faire la sérialisation vous-même.

+0

Je me suis dit qu'avec autant d'assistants dans MVC il pourrait y avoir une option pour modifier quelque part :) – Jedidja

5

sont-elles paires date/valeur type de System.Web.UI.Pair? Si oui, vous pouvez le faire.

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

Il retourne comme vous le souhaitez;

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

Même si elles ne sont pas le type de System.Web.UI.Pair, je suis sûr que vous avez l'idée.