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

Mat*_*zuk 3 c# asp.net asp.net-mvc json 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; }
}
Run Code Online (Sandbox Code Playgroud)

2)然后,我需要正确地编写URI控制器,该控制器将返回上面刚刚定义的“ XYZ_JSON”:

// GET: api/ReturnJSON
public XYZ_JSON Get()
{
    XYZ_JSON test = new XYZ_JSON { PropertyName = "Romulus", PropertyValue = "123123" };

    return test;
}
Run Code Online (Sandbox Code Playgroud)

将产生类似以下内容的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
}
Run Code Online (Sandbox Code Playgroud)

上面的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"}
}
Run Code Online (Sandbox Code Playgroud)

上面的设计模式是我要使用ASP.NET Web API来完成的工作,这是一种返回半硬编码JSON响应对象的非常简单的方法,它使我可以从单个URI返回非常独特且动态的响应。在许多用例中,将返回最多8个完全唯一的Class对象的列表。

另外,如果我要完成的工作是做事的倒退方式,那很好。我已经发布了一个非常成功且稳定的iOS应用程序,该应用程序具有完美的Django后端服务器,可以完美地处理所有问题。

有人可以向我解释如何使用ASP.NET Web API返回简单的硬编码JSON响应吗?

谢谢!

and*_*axo 5

您可以在C#中创建匿名类型,因此可以使用其中一种来生成硬编码结果。例如:

return new JsonResult
{
    Data = new
    {
        result = "success",
        value = "some value"
    }
};
Run Code Online (Sandbox Code Playgroud)

为了澄清,上面的代码是针对ASP.NET MVC的。如果您使用的是Web API,则可以只返回数据对象,也可以使用IHttpActionResult。匿名类型部分(new {})保持不变。