我以前在Django中这样做(类似于Ruby on Rails),在某些情况下我需要硬编码JSON响应对象以便客户端能够解释,但我已经在网上搜索到如何使用ASP.NET Web API解决这个问题,我无法在此找到任何内容,ASP.NET Web API似乎迫使我创建一个类来表示每个URI的JSON响应控制器。
例如,这是我知道手动创建JSON响应的唯一方法:
1。)我首先需要创建表示响应对象的类
public class XYZ_JSON
{
public string PropertyName { get; set; }
public string PropertyValue { get; set; }
}
2.)然后我需要正确编写URI控制器,它将返回" XYZ_JSON"我刚刚在上面定义的内容:
// GET: api/ReturnJSON
public XYZ_JSON Get()
{
XYZ_JSON test = new XYZ_JSON { PropertyName = "Romulus", PropertyValue = "123123" };
return test;
}
会产生类似以下内容的http响应:
200 OK
{"PropertyName":"Romulus", "PropertyValue":"123123"}
这整个类到JSON设计模式很酷,但它没有帮助,实际上在尝试将类作为JSON对象返回时会更糟糕,其中包含许多类,如:
public class XYZ_JSON
{
public string PropertyName { get; set; }
public string PropertyValue { get; set; }
public List<ComplexObject> objects { get; set; } // <- do not want
}
上面的JSON响应对象并不复杂,但对于我想要完成的事情,我必须在类列表中的类列表中放入类列表,我不能以这种尴尬的方式发展它,除非我花了一个星期的时间,这是荒谬的。
我需要能够以这种方式返回JSON响应:
// GET: api/ReturnJSON
public JSON_Response Get(string id)
{
// do some SQL querying here to grab the model or what have you.
if (somethingGoesWrong = true)
return {"result":"fail"}
else
return {"result":"success","value":"some value goes here"}
}
上面的设计模式是我尝试使用ASP.NET Web API完成的,这是一种非常简单的方法来返回一个半硬编码的JSON响应对象,这将允许我返回非常独特和动态的响应一个URI。这将是许多用例,其中将返回最多8个完全唯一的Class对象的列表。
另外,如果我想要完成的是落后的做事方式而不是那么好。我发布了一个非常成功和稳定的iOS应用程序,它拥有一个完美无缺的Django后端服务器,可以完美地处理这些事情而不会出现任何问题。
有人可以向我解释如何使用ASP.NET Web API返回简单的硬编码JSON响应吗?
谢谢!
答案 0 :(得分:5)
您可以在C#中创建anonymous types,这样您就可以使用其中一个来生成硬编码结果。例如:
return new JsonResult
{
Data = new
{
result = "success",
value = "some value"
}
};
为了澄清,上面的代码是针对ASP.NET MVC的。如果您正在使用Web API,那么您只需返回数据对象,或使用IHttpActionResult
。匿名类型部分(new {}
)保持不变。
答案 1 :(得分:3)
使用匿名对象。
public object Get(string id)
{
// do some SQL querying here to grab the model or what have you.
if (somethingGoesWrong = true)
return new {result = "fail"}
else
return new {result = "success", value= "some value goes here"}
}
答案 2 :(得分:1)
您可以使用通用JObject返回您的值,而无需构建完整的类结构,如下所示
public JObject Get(int id)
{
return JsonConvert.DeserializeObject<JObject>(@"{""result"":""success"",""value"":""some value goes here""}");
}
答案 3 :(得分:1)
对于硬编码响应,为什么不做下面这样的事情。将返回JSON内容,而不会被引号括起来。
public HttpResponseMessage Get()
{
string content = "Your JSON content";
return BuildResponseWithoutQuotationMarks(content);
}
private HttpResponseMessage BuildResponseWithoutQuotationMarks(string content)
{
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(content);
return response;
}
private HttpResponseMessage BuildResponseWithQuotationMarks(string content)
{
var response = Request.CreateResponse(HttpStatusCode.OK, content);
return response;
}
答案 4 :(得分:0)
// GET: api/ReturnJSON
public JsonResult Get()
{
return Json(new {Property1 = "Valu1", Properrty2 = "Value2"});
}
您可以使用JsonResult类返回json。并且Json()方法采用匿名对象,因此您不需要创建类。