Mag*_*pie 71 c# json json.net asp.net-web-api
使用MVC时,返回adhoc Json很容易.
return Json(new { Message = "Hello"});
Run Code Online (Sandbox Code Playgroud)
我正在使用新的Web API寻找此功能.
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
Run Code Online (Sandbox Code Playgroud)
这会引发异常,因为DataContractJsonSerializer无法处理匿名类型.
我有这个替换此JsonNetFormatter基于Json.Net.如果我使用,这可行
public object Test()
{
return new { Message = "Hello" };
}
Run Code Online (Sandbox Code Playgroud)
但是我没有看到使用Web API的重点,如果我不回来HttpResponseMessage,我会更好地坚持使用vanilla MVC.如果我尝试使用:
public HttpResponseMessage<object> Test()
{
return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK);
}
Run Code Online (Sandbox Code Playgroud)
它将整个序列化HttpResponseMessage.
任何人都可以指导我一个解决方案,我可以在其中返回匿名类型HttpResponseMessage?
car*_*ira 80
这在Beta版本中不起作用,但它在最新的位(从http://aspnetwebstack.codeplex.com构建)中,因此它可能是RC的方式.你可以做
public HttpResponseMessage Get()
{
return this.Request.CreateResponse(
HttpStatusCode.OK,
new { Message = "Hello", Value = 123 });
}
Run Code Online (Sandbox Code Playgroud)
Lui*_*iso 16
这个答案可能会有点迟,但截至今天WebApi 2已经出来了,现在你可以更容易地做你想做的事,你只需要这样做:
public object Message()
{
return new { Message = "hello" };
}
Run Code Online (Sandbox Code Playgroud)
沿着管道,它将被序列化为xml或json根据客户的偏好(Accept标题).希望这有助于任何人绊倒这个问题
你可以使用JsonObject:
dynamic json = new JsonObject();
json.Message = "Hello";
json.Value = 123;
return new HttpResponseMessage<JsonObject>(json);
Run Code Online (Sandbox Code Playgroud)
您可以使用ExandoObject.(添加using System.Dynamic;)
[Route("api/message")]
[HttpGet]
public object Message()
{
dynamic expando = new ExpandoObject();
expando.message = "Hello";
expando.message2 = "World";
return expando;
}
Run Code Online (Sandbox Code Playgroud)
在Web API 2中,您可以使用新的IHttpActionResult(它代替HttpResponseMessage),然后返回一个简单的Json对象:(类似于MVC)
public IHttpActionResult GetJson()
{
return Json(new { Message = "Hello"});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60107 次 |
| 最近记录: |