在ASP.NET控制器方法

时间:2017-11-20 12:55:23

标签: c# json asp.net-core asp.net-core-mvc

我有以下工作控制器方法,它以简单的文本格式返回JSON。

[HttpPost]
public IActionResult DecodeBarcode(string productCodeScheme, string productCode, string serialNumber, string batch, string expirationDate, int commandStatusCode) {
    string TextAreaResult = string.Empty;
    try {
        TextAreaResult = string.Format("{0} {1} {2}", request.getHttpInformation(), request.getHttpWarning(), request.getHttpResponseCode());
    } catch (Exception exc) {
        TextAreaResult = "Exception: " + exc.Message;
    }
    return Json(TextAreaResult);
}

运行上述方法后的输出类似于

"The pack is active No warning 200"

request.getHttpInformation() is The pack is active
request.getHttpWarning() is No warning
request.getHttpResponseCode() is 200

现在,我正在尝试将响应拆分为3个不同的键值对,以便我的响应看起来像

{
  httpInformation: "The pack is active",
  httpWarning: "No Warning",
  httpResponseCode: "200"
}

如何在return Json(TextAreaResult)来电中传递其他参数?

如果我喜欢以下内容,则无效

[HttpPost]
public IActionResult DecodeBarcode(string productCodeScheme, string productCode, string serialNumber, string batch, string expirationDate, int commandStatusCode) {
    string TextAreaResult = string.Empty;
    string TextAreaResultHttpInformation = string.Empty;
    string TextAreaResultHttpWarning = string.Empty;
    string TextAreaResultHttpResponseCode = string.Empty;

    try {
        TextAreaResultHttpInformation = string.Format("{0}}", request.getHttpInformation());

        TextAreaResultHttpWarning = string.Format("{1}}", request.getHttpWarning());

        TextAreaResultHttpResponseCode = string.Format("{2}}", request.getHttpResponseCode());
    } catch (Exception exc) {
        TextAreaResult = "Exception: " + exc.Message;
    }

    return Json(TextAreaResultHttpInformation, TextAreaResultHttpInformation, TextAreaResultHttpResponseCode);
}

如何构造键值对并以JSON形式返回?或许,Json方法不是这里的正确选择,但对C#来说是新手,我不知道构建JSON的任何其他c#内置方法

3 个答案:

答案 0 :(得分:3)

假设您确实希望将响应作为JSON使用,您可以通过执行

来实现此目的
return Json(new 
{
    HttpInformation = TextAreaResultHttpInformation, 
    HttpWarning = TextAreaResultHttpWarning,
    StatusCode = TextAreaResultHttpResponseCode
});

答案 1 :(得分:0)

您可以为这些属性创建包装类并将其返回。

HTTP

或者您可以将重新调整的值从IActionResult更改为JsonResult

答案 2 :(得分:-1)

如果您想要一种不同的方法,那么您可以通过以下方式使用JsonSerializer:

// Creating BlogSites object  
BlogSites bsObj = new BlogSites()  
{  
   Name = "test-name",  
   Description = "test-description"  
};  

// Serializing object to json data  
JavaScriptSerializer js = new JavaScriptSerializer();  
string jsonData = js.Serialize(bsObj); // {"Name":"test-name","Description":"test-description"}  

您只需要在其对象中创建一个类并存储值,然后对其进行序列化。如果您有一个列表,那么您可以使用该类的列表,然后序列化。