2013-07-11 6 views
11

Ich möchte eine JSON-Datei zur Verwendung als Teil einer einfachen Web-Prototyping-Übung erstellen. LinqPAD ist perfekt für den Zugriff auf die Daten aus meiner Datenbank in der Form, die ich brauche, aber ich kann es nicht einfach als JSON herausbekommen.Wie man Daten von LinqPAD als JSON exportiert?

Ich interessiere mich nicht wirklich, was das Schema ist, weil ich mein JavaScript anpassen kann, um mit dem zu arbeiten, was zurückgegeben wird.

Ist das möglich?

Antwort

18

Eine flüssige Lösung ist es, die folgenden Methoden, um die „My Extensions“ Datei in LINQPad hinzuzufügen:

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

Dann können Sie sie wie folgt in jeder Abfrage verwenden können, die Sie mögen:

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

Ich habe "ToJson" separat hinzugefügt, damit es mit "Expections" verwendet werden kann.

+5

Das ist schöner, sobald es eingerichtet ist. Vielen Dank! Ich hoffe, der Autor fügt dies standardmäßig in LinqPAD ein. Hinweis für andere, müssen Sie die 'System.Web.Extensions.dll' zum _Meine Erweiterungen_Dokument hinzufügen, wie in meiner Antwort beschrieben. –

+0

Dies schlägt fehl, wenn eine Beziehung für den Datentyp besteht mit: Beim Verfolgen eines Objekts vom Typ 'LINQPad.User.YourType' wurde ein Zirkelverweis festgestellt :( –

9

Dies wird nicht direkt unterstützt, und ich habe eine Feature-Anfrage here geöffnet. Stimme dafür, wenn du das auch nützlich findest.

jetzt eine Lösung ist folgendes zu tun:

  • Stellen Sie die Sprache auf C# Statement (s)
  • hinzufügen eine Montagereferenz (Presse F4) zu System.Web.Extensions.dll
  • In Im selben Dialogfeld fügen Sie einen Namespace-Import zu System.Web.Script.Serialization
  • Verwenden Sie Code wie dem folgenden, um Ihre Abfrage als JSON
  • auszugeben
new JavaScriptSerializer().Serialize(query).Dump(); 
+0

Danke, das war die einfachste Lösung zu implementieren. – seangwright

+0

Die einfache Lösung. – MarwaAhmad

2

Ab Version 4.47 kann LINQPad eingebaute JSON-Dateien exportieren. Kombiniert mit dem neuen Dienstprogramm lprun.exe kann es auch Ihre Anforderungen erfüllen.

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

6

Es gibt eine Lösung mit Json.NET da es Formatierung eingekerbt ist, und macht Json richtig geht. In Json.NET von NuGet und beziehen sich auf Newtonsoft.Json.dll zu Ihrem „My Extensions“ Abfrage und auch den folgenden Code:

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

Verwenden .DumpJson() als .Dump() zu Rendere das Ergebnis. Es ist möglich, bei Bedarf mehr .DumpJson() mit verschiedenen Signaturen zu überschreiben.