2011-01-23 9 views
5

Hola amigos, espero que hayan tenido un buen descanso durante las vacaciones.Crear objeto JSON en lugar de una matriz utilizando LINQ/JavaScriptSerializer

He creado un WebService que devuelve una lista de ciudades y empresas dentro de esas ciudades como una cadena JSON utilizando LINQ/JavaScriptSerializer.

Mi código es más o menos

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); 

que produce la siguiente cadena JSON

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

Sin embargo, quiero hacer de la ciudad la clave para que pueda buscar fácilmente por ella

Por ejemplo

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

¿Alguna idea?

+0

No creo que sea JSON válido. ¿Está seguro de que no quiere decir corchetes en lugar de corchetes? –

+0

Hola @Mark, ¿te refieres a la 2da? Escribí manualmente eso para disculparme por el error. – Marko

Respuesta

8

sólo una idea ... prueba

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

Así que esto va a construir una Dictionary<string, xxx> donde xxx es un tipo anónimo con una sola propiedad, "empresas" que es una secuencia de nombres de empresas.

+0

Gracias Jon, estoy obteniendo una excepción a pesar de 'Error 2 Argumento 3: no se puede convertir de 'AnonymousType # 1' a 'System.Collections.Generic.IEqualityComparer ' ' – Marko

+0

@Marko I * creo * Veo el problema allí - prueba la actualización? (Jon- espero que no te importe que corte el código; p) –

+0

@Marc: Gracias por eso :) Se editará de nuevo solo para tratar de deshacerte de la barra de desplazamiento ... –

Cuestiones relacionadas