我想创建一个 JSON 文件,用作简单的 Web 原型设计练习的一部分。LinqPAD 非常适合以我需要的形状从我的数据库中访问数据,但是我不能很容易地将它作为 JSON 取出。
我并不关心架构是什么,因为我可以调整我的 JavaScript 以处理返回的任何内容。
这可能吗?
更流畅的解决方案是在 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”一起使用。
这不是直接支持的,我已经在这里打开了一个功能请求。如果您也觉得这很有用,请为它投票。
目前的解决方法是执行以下操作:
System.Web.Extensions.dll
System.Web.Script.Serialization
new JavaScriptSerializer().Serialize(query).Dump();
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()
如有必要,可以使用不同的签名覆盖更多。
从 4.47 版本开始,LINQPad 可以导出内置的 JSON。结合新的lprun.exe
实用程序,它也可以满足您的需求。