2016-02-26 10 views
9

Possiedo un elenco di oggetti di classe che dispongono di indirizzo e-mail e membri dei dati di stato. Sto cercando di convertire questi in un json, assicurandosi di avere la parola "operazioni" sulla matrice.Conversione di un elenco di oggetti nell'array json

Questa è la mia classe:

class MyClass 
{ 
    public string email {get; set; } 
    public string status { get; set; } 
} 

Questo è il mio codice attuale (non costruire):

List<MyClass> data = new List<MyClass>(); 
data = MagicallyGetData(); 

string json = new { 
    operations = new { 
      JsonConvert.SerializeObject(data.Select(s => new { 
       email_address = s.email, 
       status = s.status 
      })) 
    } 
}; 

Questo è il JSON che sto cercando di ottenere:

{ 
    "operations": [ 
    { 
     "email_address": "[email protected]", 
     "status": "good2go" 
    }, 
    { 
     "email_address": "[email protected]", 
     "status": "good2go" 
    },... 
    ] 
} 

EDIT1 Devo dire che i dati che sto ricevendo per viene da un DB. Sto de-serializzando un JSON dal DB e utilizzando i dati in molti modi diversi, quindi non posso cambiare i nomi dei membri della mia classe.

+0

cosa stai ricevendo in realtà? – Arpit

+0

Perché ti stai annoiando con oggetti anonimi? Usa invece datacontrat o attributo name http://www.newtonsoft.com/json/help/html/JsonPropertyName.htm – cdie

+0

@ Arpit Il più vicino che ho ottenuto è lo stesso output senza la stringa di operazioni prima dell'array. – Blankdud

risposta

11

Credo che questo ti darà quello che vuoi. Si dovrà cambiare i nomi delle proprietà di classe, se possibile -

 class MyClass 
     { 
      public string email_address { get; set; } 
      public string status { get; set; } 
     } 

     List<MyClass> data = new List<MyClass>() { new MyClass() { email_address = "[email protected]", status = "good2go" }, new MyClass() { email_address = "email2[email protected]", status = "good2go" } }; 
     var json = JsonConvert.SerializeObject(new 
     { 
      operations = data 
     }); 
+0

Con alcune modifiche, questa è la soluzione con cui sono andato. Grazie, apprezzalo. – Blankdud

+1

Cosa devo fare se non desidero dati o operazioni all'inizio? –

+1

@HafizH se non vuoi che "operazioni" all'inizio semplicemente: 'var json = JsonConvert.SerializeObject (operations)' – Valip

0

Si può provare con qualcosa di simile:

using System.Web.Script.Serialization; 
var jsonSerialiser = new JavaScriptSerializer(); 
var json = jsonSerialiser.Serialize(data); 
Problemi correlati