2013-07-11 75 views
11

Voglio creare un file JSON da utilizzare come parte di un semplice esercizio di prototipazione web. LinqPAD è perfetto per accedere ai dati dal mio DB con la forma che mi serve, tuttavia non riesco ad ottenerlo come JSON molto facilmente.Come esportare i dati da LinqPAD come JSON?

Non mi interessa davvero quale sia lo schema, perché posso adattare il mio JavaScript affinché funzioni con qualsiasi cosa venga restituita.

È possibile?

risposta

18

Una soluzione più fluente è quello di aggiungere i seguenti metodi per il file "My Extensions" in LINQPad:

public static String DumpJson<T>(this T obj) 
{ 
    return 
     obj 
     .ToJson() 
     .Dump(); 
} 

public static String ToJson<T>(this T obj) 
{ 
    return 
     new System.Web.Script.Serialization.JavaScriptSerializer() 
     .Serialize(obj); 
} 

Quindi è possibile usarli come questo in tutte le query che ti piace:

Enumerable.Range(1, 10) 
.Select(i => 
    new 
    { 
     Index = i, 
     IndexTimesTen = i * 10, 
    }) 
.DumpJson(); 

Ho aggiunto "ToJson" separatamente in modo che possa essere utilizzato con "Expessions".

+5

Questo è più bello una volta impostato. Grazie mille! Spero che l'autore includa questo in LinqPAD di default. Nota agli altri, dovrai aggiungere 'System.Web.Extensions.dll' al documento _My Extensions_, come descritto nella mia risposta. –

+0

Non riesce se c'è una relazione sul tipo di dati con: È stato rilevato un riferimento circolare durante la serializzazione di un oggetto di tipo "LINQPad.User.YourType" :( –

9

Questo non è supportato direttamente e ho aperto una richiesta di funzionalità here. Vota per questo se anche tu lo trovassi utile.

Una soluzione per ora è quello di effettuare le seguenti operazioni:

  • Impostare la lingua per C# Statement (s)
  • Aggiungi un riferimento all'assembly (premere F4) per System.Web.Extensions.dll
  • In la stessa finestra di dialogo, aggiungi un'importazione namespace a System.Web.Script.Serialization
  • Usa il codice come il seguente per scaricare la tua query come JSON
new JavaScriptSerializer().Serialize(query).Dump(); 
+0

Grazie, questa è stata la soluzione più semplice da implementare. – seangwright

+0

La soluzione semplice. – MarwaAhmad

2

A partire dalla versione 4.47, LINQPad ha la possibilità di esportare JSON integrato. In combinazione con la nuova utility lprun.exe, può anche soddisfare le vostre esigenze.

http://www.linqpad.net/lprun.aspx

6

C'è una soluzione con Json.NET dal momento che rientrato formattazione, e rende JSON data correttamente. Aggiungere Json.NET da NuGet, e si riferiscono Newtonsoft.Json.dll alla tua richiesta “mie estensioni” e pure il seguente codice:

public static object DumpJson(this object value, string description = null) 
{ 
    return GetJson(value).Dump(description); 
} 

private static object GetJson(object value) 
{ 
    object dump = value; 

    var strValue = value as string; 
    if (strValue != null) 
    { 
     var obj = JsonConvert.DeserializeObject(strValue); 
     dump = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented); 
    } 
    else 
    { 
     dump = JsonConvert.SerializeObject(value, Newtonsoft.Json.Formatting.Indented); 
    } 

    return dump; 
} 

Usa .DumpJson() come .Dump() a rendere il risultato. È possibile ignorare più .DumpJson() con diverse firme, se necessario.