将对象作为json返回

时间:2012-10-17 20:19:15

标签: c# asp.net-mvc asp.net-web-api

我有这门课。

public class SDS
{
    public Guid A { get; set; }

    public Guid B { get; set; }

    public String C { get; set; }
}

我像这样返回json

public HttpResponseMessage Val()
        {

                SDS svr = new SDS();
                svr.A = ...
                svr.B = ...
                svr.C = ...

    return Request.CreateResponse(HttpStatusCode.OK, json_serializer.Serialize(svr), "application/json");
}

在客户端,我使用像这样的jquery

var obj = jQuery.parseJSON(jqXHR.responseText);

问题是返回的json是这样的,我无法迭代值或通过索引访问元素:

{"A":"3a9779fe-9c92-4208-b34d-5113e0548d50","B":"206575a5-8a90-4a13-89ec-910e5a9a35a1","C":"Meta"}

要解决这个问题,我必须这样做,这有效:

obj = jQuery.parseJSON('{"List":[' + obj + ']}');

我的问题是有没有办法在类上使用一个属性,以便它返回一个我可以使用的json?

[SomeAttribute name="List"]
public class SDS
{
    public Guid A { get; set; }

    public Guid B { get; set; }

    public String C { get; set; }
}

... ... ...

UPDATE2:

此问题仍然存在,因为所提供的答案都无法解决问题。

5 个答案:

答案 0 :(得分:2)

您可以在操作方法中调用JsonResult来返回Json()

public ActionResult Get(int id)
{
    var item = ...
    return Json(item);
}

答案 1 :(得分:0)

您是否尝试使用System.Web.Mvc.JsonResult中的JsonResult?

public JsonResult Val()  {}

希望这有助于。

答案 2 :(得分:0)

嗯,你要返回一个单独的对象,而不是列表,但你可以这样做:

public HttpResponseMessage Val()
{

    SDS svr = new SDS();
    svr.A = ...
    svr.B = ...
    svr.C = ...

    var list = new {List = new [] {svr}};

    return Request.CreateResponse(HttpStatusCode.OK, json_serializer.Serialize(svr), "application/json");
}

答案 3 :(得分:0)

返回的JSON是正确的,不要更改控制器中的任何内容

..但在你的JS循环中,带有for循环的对象

for(var propertyName in obj){
     ...
}

propertyName为您提供A,B和C. 和...

var value = obj[propertyName]

为您提供值

答案 4 :(得分:0)

添加ApiController并使用System.Web.Http;