执行存储过程返回对象

时间:2018-02-15 15:16:24

标签: c# entity-framework

在代码第一种方法中,我希望

static void Main()
{
    var sprocName = "sprocTesting";
    var db = new EntityContext();
    var result = db.Database.SqlQuery<object>(sprocName).ToList();
    var json = JsonConvert.SerializeObject(result);
}

在这种特殊情况下,我将无法让一个班级将其归还,我能做的最好的就是Object

这会运行,但result的输出只不过是{object}的列表。序列化的json只不过是一堆空括号

[{},{},{}....{}]

计数符合我对此存储过程的预期(5,228个结果)。

我想做什么甚至可行,或者我只是错过了什么?

我应该提一下,如果我创建一个类来转储它,那么它工作正常。但这只是存储过程名称将从另一个表传入的一个示例,因此我无法为每个可能的结果集构建一个类,因此需要泛型。

2 个答案:

答案 0 :(得分:0)

这是不可能的。您需要一个用于序列化的类才能工作,并且您需要一个ORM类来将返回的查询值映射到。

如果要在没有具体类定义的情况下执行此操作,则必须编写自定义代码以确定返回的结果集结构,将结果集读入内存,然后确定如何将内存结果集中的序列化为JSON。

答案 1 :(得分:0)

您使用的是哪个版本的SQL?

如果您有SQL 2016,可以使用 for JSON path 子句轻松完成此操作;

https://docs.microsoft.com/en-us/sql/relational-databases/json/format-query-results-as-json-with-for-json-sql-server