1
votes

Comment renvoyer un objet avec des champs dynamiques

Je dois créer un graphique linéaire pour chaque magasin chaque mois de l'année. Cependant, le magasin est dynamique cela dépend du commerçant. Voici la requête de retour de la base de données:

[{"Month":"January","Refoil":44,"Sustainable Salons":242},

{"Month":"February","Refoil":2,"Sustainable Salons":10}]

Comment puis-je renvoyer un objet tel que:

[{"Month":"January","Total":44,"Store":"Refoil"},
{"Month":"January","Total":242,"Store":"Sustainable Salons"},
{"Month":"January","Total":99,"Store":"The Base Collective"},
{"Month":"February","Total":37,"Store":"Refoil"},
{"Month":"February","Total":219,"Store":"Sustainable Salons"},
{"Month":"February","Total":122,"Store":"The Base Collective"},
{"Month":"February","Total":148,"Store":"Watersco Australia"}]


3 commentaires

Que veux-tu faire exactement? Regrouper par nom de magasin et par mois? Vous pouvez utiliser LINQ pour de telles choses.


Voulez-vous renvoyer une chaîne JSON?


Je dois réaliser comme ceci: {"Month": "January", "Refoil": 44, "Sustainable Salons", 242}


3 Réponses :


0
votes
  1. Désérialisez votre json en référence objet c # Désérialisation des données JSON en C # à l'aide de JSON.NET < / p>

  2. Regrouper par mois en utilisant linq et json sérialisez votre objet c # et envoyez-le à votre client.

Si cela ne vous aide pas, veuillez fournir plus de détails, à quoi vous attendez-vous après avoir regroupé vos données par mois?


0 commentaires

0
votes

Mappez la réponse db dans le modèle c #, puis créez un objet anonyme avec la structure nécessaire et sérialisez avec Json.Net. Si ce n'est pas ce que vous voulez, veuillez ajouter plus de détails


0 commentaires

1
votes

Vous pouvez utiliser un ExpandoObject pour transposer les résultats: -

[
  {
    "Month": "January",
    "Refoil": 44,
    "Sustainable Salons": 242,
    "The Base Collective": 99
  },
  {
    "Month": "February",
    "Refoil": 37,
    "Sustainable Salons": 219,
    "The Base Collective": 122,
    "Watersco Australia": 148
  }
]

Classe de résultat : -

public class Result
{
    public string Month { get; set; }
    public string Store { get; set; }
    public int Total { get; set; }
}

Donne le résultat suivant: -

var results = new List<Result>();

results.Add(new Result() { Month = "January", Total = 44, Store = "Refoil" });
results.Add(new Result() { Month = "January", Total = 242, Store = "Sustainable Salons" });
results.Add(new Result() { Month = "January", Total = 99, Store = "The Base Collective" });
results.Add(new Result() { Month = "February", Total = 37, Store = "Refoil" });
results.Add(new Result() { Month = "February", Total = 219, Store = "Sustainable Salons" });
results.Add(new Result() { Month = "February", Total = 122, Store = "The Base Collective" });
results.Add(new Result() { Month = "February", Total = 148, Store = "Watersco Australia" });

var transpose = results.GroupBy(x => x.Month).Select(x =>
{
    dynamic e = new ExpandoObject();

    e.Month = x.Key;

    var ed = e as IDictionary<string, object>;

    x.ToList().ForEach(y => ed.Add(y.Store, y.Total));

    return e;
});

Debug.WriteLine(JsonConvert.SerializeObject(transpose, Newtonsoft.Json.Formatting.Indented));


3 commentaires

Merci pour ça. Cependant, j'ai du mal à afficher un graphique linéaire dans moris.js.


Comment puis-je définir un total de 0 si ce magasin n'existe pas ce mois-là?


@ Jen143, consultez ma réponse ici qui explique comment utiliser une jointure externe pour inclure les valeurs manquantes. Vous pouvez l'appliquer à votre liste de résultats avant d'utiliser le code dynamique ci-dessus.