如何将 JSON 从 Linq 返回到实体查询

本文关键字:返回 实体 查询 Linq JSON | 更新日期: 2023-09-27 18:36:58

我很难理解从我的控件中的查询返回 json 的选项,因为似乎有很多方法可以做到这一点。如有任何澄清,将不胜感激。

我想从以下方面返回 json:

public class MyController : ApiController
{
private MyEntities context = new MyEntities();
public IQueryable <string> Get()
{
    var query =
        from MY_ENTITY_1 in my_entity_1
        from MY_ENTITY_2 in my_entity_2
        from MY_ENTITY_3 in my_entity_3
        where
             MY_ENITITY_1.something == MY_ENTITY_2.something
        select new
            {
                Result1 = MY_ENTITY_1.FOO1,
                Result2 = MY_ENTITY_2.FOO2,
                Result3 = MY_ENTITY_3.FOO3
            };
    foreach (var myResults in query)
    {
        Console.WriteLine(myResults);
    };
    return myResults; // JSON?
}

如何将 JSON 从 Linq 返回到实体查询

我的

理解是,当调用这些操作时,ApiController会自动将返回的对象转换为JSON:

public IQueryable <MyGetResult> Get()
{
    var query =
        from MY_ENTITY_1 in my_entity_1
        from MY_ENTITY_2 in my_entity_2
        from MY_ENTITY_3 in my_entity_3
        where
             MY_ENITITY_1.something == MY_ENTITY_2.something
        select new MyGetResult
            {
                Result1 = MY_ENTITY_1.FOO1,
                Result2 = MY_ENTITY_2.FOO2,
                Result3 = MY_ENTITY_3.FOO3
            };
    return query;
}
public class MyGetResult
{
    public Foo Result1 {get;set;}
    public Foo Result2 {get;set;}
    public Foo Result3 {get;set;}
}

WebAPI 使用称为"内容协商"的策略来确定调用方想要的数据类型,并相应地自动序列化结果。

ApiController看来您正在使用WebAPI .您不必从方法返回 JSON 或 XML,而只需返回对象即可。调用方负责指定返回数据类型。

例如,如果您通过 IE 浏览到您的服务,您将获得 JSON 返回,因为 IE 使用 JSON 作为默认返回类型。如果您在 Chrome 中浏览相同的网址,您将获得 XML ,因为这是 Chrome 的默认设置,如果请求ContentType: application/json则取决于请求的ContentType,然后您将获得 JSON。