1

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

2 回答 2

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 使用一种称为“内容协商”的策略来确定调用者想要什么数据类型,并相应地自动序列化结果。

于 2013-10-25T19:26:17.300 回答
1

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

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

于 2013-10-25T19:29:30.747 回答