如何将LinqPAD中的数据导出为JSON?

如何将LinqPAD中的数据导出为JSON?,json,linqpad,Json,Linqpad,我想创建一个JSON文件,作为简单web原型制作练习的一部分。LinqPAD非常适合以我需要的形状从我的DB访问数据,但是我不能很容易地将它作为JSON输出 我并不真正关心模式是什么,因为我可以调整JavaScript以处理返回的任何内容 这可能吗?这不是直接支持的,我已经打开了一个功能请求。如果你也觉得这很有用的话,请投赞成票 目前的解决办法是执行以下操作: 将语言设置为C#语句 将程序集引用(按F4键)添加到System.Web.Extensions.dll 在同一对话框中,将名称空间导入

我想创建一个JSON文件,作为简单web原型制作练习的一部分。LinqPAD非常适合以我需要的形状从我的DB访问数据,但是我不能很容易地将它作为JSON输出

我并不真正关心模式是什么,因为我可以调整JavaScript以处理返回的任何内容


这可能吗?

这不是直接支持的,我已经打开了一个功能请求。如果你也觉得这很有用的话,请投赞成票

目前的解决办法是执行以下操作:

  • 将语言设置为C#语句
  • 将程序集引用(按F4键)添加到
    System.Web.Extensions.dll
  • 在同一对话框中,将名称空间导入添加到
    System.Web.Script.Serialization
  • 使用如下代码将查询转储为JSON

更流畅的解决方案是将以下方法添加到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);
}

我单独添加了“ToJson”,因此它可以与“expensions”一起使用。

从4.47版开始,LINQPad能够导出内置的JSON。结合新的
lprun.exe
实用程序,它还可以满足您的需要


有一个解决方案使用了Json.NET,因为它具有缩进格式,并正确呈现Json日期。从NuGet添加Json.NET,并在“我的扩展名”查询中引用Newtonsoft.Json.dll以及以下代码:

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

使用.DumpJson()作为
.Dump()
呈现结果。如果需要,可以使用不同的签名覆盖更多的
.DumpJson()

一旦设置好,效果会更好。非常感谢!我希望作者默认在LinqPAD中包含这一点。请注意,您必须将
System.Web.Extensions.dll
添加到My Extensions文档中,如我的回答中所述。如果数据类型上存在以下关系,则此操作将失败:序列化“LINQPad.User.YourType”类型的对象时检测到循环引用:(谢谢,这是最容易实现的解决方案。简单的解决方案。很好的方法。让我补充一下,我必须附加一个
.select(…)
以及一个
new{…}
var query=myTable.select(s=>new{s.Id,s=>s.MyField1});
否则它将抛出
序列化'LINQPad.User.myTable'类型的对象时检测到循环引用。
Enumerable.Range(1, 10)
.Select(i =>
    new
    {
        Index = i,
        IndexTimesTen = i * 10,
    })
.DumpJson();
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;
}