我可以手动硬编码一个JSON对象,使其由ASP.NETwebAPI返回吗?

l7mqbcuq  于 2022-11-26  发布在  .NET
关注(0)|答案(5)|浏览(147)

我习惯于在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正常{"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个完全唯一的类对象的列表。
此外,如果我试图完成的是向后的方式做的事情比这还好.我已经发布了一个非常成功和稳定的iOS应用程序与一个完美的Django后端服务器处理事情这样完美,没有任何问题.
有人能向我解释一下如何使用ASP .NETWebAPI返回一个简单的硬编码JSON响应吗?
谢谢你!

yhxst69z

yhxst69z1#

对于硬编码的响应,为什么不像下面这样做呢?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;
    }
ct2axkht

ct2axkht2#

// GET: api/ReturnJSON
public JsonResult Get()
{
   return Json(new { Property1 = "Value1", Property2 = "Value2" });
}

您可以使用JsonResult类返回json。并且Json()方法接受匿名对象,因此您不需要创建类。

qyzbxkaa

qyzbxkaa3#

您可以在C#中创建anonymous types,这样您就可以使用其中的一个生成硬编码结果。例如:

return new JsonResult
{
    Data = new
    {
        result = "success",
        value = "some value"
    }
};

为了澄清,上面的代码是针对ASP.NETMVC的。如果你使用WebAPI,那么你可以只返回数据对象,或者使用IHttpActionResult。匿名类型部分(new {})保持不变。

ef1yzkbh

ef1yzkbh4#

使用匿名对象。

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"}
}
gxwragnw

gxwragnw5#

您可以使用泛型JObject返回值,而无需构造完整的类结构,如下所示

public JObject Get(int id)
    {

        return JsonConvert.DeserializeObject<JObject>(@"{""result"":""success"",""value"":""some value goes here""}");

    }

相关问题