Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象返回为json_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# 将对象返回为json

C# 将对象返回为json,c#,asp.net-mvc,asp.net-web-api,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 = ...

我有这门课

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");
}
var obj = jQuery.parseJSON(jqXHR.responseText);
在客户端,我像这样使用jquery

public HttpResponseMessage Val()
        {

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

    return Request.CreateResponse(HttpStatusCode.OK, json_serializer.Serialize(svr), "application/json");
}
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; }
}
。。。 ...

更新2:

此问题仍然存在,因为提供的答案都无法生成修复。

您可以通过调用操作方法返回

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

您是否尝试使用来自的JsonResult


希望这有帮助。

好吧,您返回的是单个对象,而不是列表,但您可以执行以下操作:

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");
}

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

..但在JS循环中,对象使用for-in循环

for(var propertyName in obj){
     ...
}
propertyName为您提供A、B和C 而且


提供值

添加ApiController并使用System.Web.Http

谢谢,但是我得到的名称“Json”在当前上下文中不存在。可能是因为我使用WEB APIvar list=new{list=svr};返回{“列表”:{“A”:“3a9779fe-9c92-4208-b34d-5113e0548d50”,“B”:“206575a5-8a90-4a13-89ec-910e5a9a35a1”,“C”:“Meta”}而不是{“列表”:{“A”:“3a9779fe-9c92-4208-b34d-5113e0548d50”,“B”:“206575a5-8a90-4a13-89ec-910e5a9a35a1”,“C”:“Meta”}因为它应该工作,但不知道为什么会返回这个列表”{,而不是像这样的{“列表”:[{…}]}。jQuery.parseJSON无法解析“{”列表“:[{…}]}”看起来WebAPI的情况发生了变化。我将编辑我的答案以返回到您原来的方法。我忘了注意我使用的是WEB APIjQuery。parseJSON无法将json解析为数组,因此obj[n]不起作用。因为在对象上工作时,它访问对象的属性,就像您通过字典的键一样,我将对其进行编辑以澄清使用它来获取obj:var obj=jQuery.parseJSON(jqXHR.responseText);当然,我正是这样做的,它无法将json解析为数组。这太短了,不是一个好的答案。请考虑扩展它或将其移动到评论。