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