我可以手动硬编码ASP.NET Web API返回的JSON对象吗?

时间:2015-04-16 16:44:11

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

我以前在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响应吗?

谢谢!

5 个答案:

答案 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()方法采用匿名对象,因此您不需要创建类。