2011-01-23 8 views
5

Ehi gente, spero che abbiate avuto una buona pausa durante le vacanze.Crea un oggetto JSON invece di un array usando LINQ/JavaScriptSerializer

Ho creato un servizio Web che restituisce un elenco di città e aziende all'interno di tali città come una stringa JSON utilizzando LINQ/JavaScriptSerializer.

Il mio codice è più o meno

var data = from c in db.Companies 
      group c by c.City into cities 
      select new 
      { 
       city = cities.Key, 
       companies = from company in cities 
        select company.Name 
      }; 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
return jss.Serialize(data); 

che produce la seguente stringa JSON

[ 
    {"city":"Auckland","companies":["Company1","Company2"]}, 
    {"city":"Wellington","companies":["Company3","Company4","Company5"]} 
] 

Tuttavia voglio rendere la città la chiave in modo da poter facilmente cercare da essa

Per esempio

[ 
    "Auckland" : {"companies":["Company1","Company2"]}, 
    "Wellington" : {"companies":["Company3","Company4","Company5"]} 
] 

Tutte le idee?

+0

Non penso che sia un JSON valido. Stai dicendo che non intendi parentesi graffe invece di parentesi quadre? –

+0

Ehi @Mark, ti ​​riferisci al 2 °? Ho digitato manualmente così tante scuse per l'errore. – Marko

risposta

8

Solo un'idea ... prova

var data = db.Companies 
      .GroupBy(c => c.City) 
      .ToDictionary(g => g.Key, 
          g => new { companies = g.Select(c => c.Name) }); 

Quindi questo costruirà un Dictionary<string, xxx> dove xxx è un tipo anonimo con una singola proprietà, "imprese", che è una sequenza di nomi di società.

+0

Grazie Jon, sto ottenendo un'eccezione anche se "Errore 2 Argomento 3: impossibile convertire da 'AnonymousType # 1' a 'System.Collections.Generic.IEqualityComparer '' – Marko

+0

@Marko I * penso * Vedo il problema lì - prova l'aggiornamento? (Jon- spero che non ti dispiaccia che mi stia scappando via; p) –

+0

@Marc: Grazie per questo :) Eseguiremo di nuovo le modifiche solo per cercare di sbarazzarci della barra di scorrimento ... –

Problemi correlati