如何从LinqPAD导出数据作为JSON?

时间:2013-07-11 19:00:17

标签: json linqpad

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

我并不关心架构是什么,因为我可以调整我的JavaScript来处理返回的内容。

这可能吗?

4 个答案:

答案 0 :(得分:20)

更流畅的解决方案是将以下方法添加到Linqpad中的“My Extensions”文件中:

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

然后你可以在任何你喜欢的查询中使用它们:

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

我分别添加了“ToJson”,因此它可以与“Expessions”一起使用。

答案 1 :(得分:10)

这不是直接支持的,我已经打开了一个功能请求here。如果您也觉得有用,请投票给它。

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

  • 将语言设置为 C#Statement(s)
  • 添加装配参考(按 F4 )至System.Web.Extensions.dll
  • 在同一个对话框中,将命名空间导入添加到System.Web.Script.Serialization
  • 使用以下代码将您的查询转储为JSON
new JavaScriptSerializer().Serialize(query).Dump();

答案 2 :(得分:9)

有一个 Json.NET 的解决方案,因为它缩进格式,并正确呈现Json日期。从NuGet添加Json.NET,并将 Newtonsoft.Json.dll 引用到您的“ My Extensions ”查询以及以下代码:

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

答案 3 :(得分:2)

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

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