13

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

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

这可能吗?

4

4 回答 4

23

更流畅的解决方案是在 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);
}

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

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

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

于 2013-07-11T20:22:32.233 回答
11

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

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

  • 将语言设置为C# 语句
  • 添加程序集引用(按F4)到System.Web.Extensions.dll
  • 在同一个对话框中,将命名空间导入添加到System.Web.Script.Serialization
  • 使用如下代码将查询转储为 JSON
new JavaScriptSerializer().Serialize(query).Dump();
于 2013-07-11T19:00:17.357 回答
10

Json.NET有一个解决方案,因为它会进行缩进格式化,并正确呈现 Json 日期。从 NuGet 添加 Json.NET,并将Newtonsoft.Json.dll引用到您的“<em>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() as.Dump()来呈现结果。.DumpJson()如有必要,可以使用不同的签名覆盖更多。

于 2015-11-12T14:37:43.497 回答
2

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

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

于 2013-08-06T12:53:06.133 回答