如何将Linq中的JSON返回到实体查询?

时间:2013-10-25 19:21:28

标签: c# asp.net json linq asp.net-web-api

我很难理解从我的控件中的查询返回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?
}

2 个答案:

答案 0 :(得分:2)

我的理解是,当调用这些操作时,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使用名为"Content Negotiation"的策略来确定调用者想要的数据类型,并相应地自动序列化结果。

答案 1 :(得分:1)

ApiController开始,您似乎正在使用WebAPI您不必从方法返回JSON或XML,而只是返回对象。调用者负责指定返回数据类型。

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