如何从 .Net Core Web API 返回 Json?

10

这是一个基础问题。我刚接触ASP.Net Core,所以我使用Visual Studio 2017中的模板创建了一个.Net Core Web API项目,我想知道如何从Get()函数返回Json字符串。

提供的Get()函数。

    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

我想知道如何更改代码以返回类似以下的int变量的Json字符串。
    // GET: api/MOER
    [HttpGet]
    public <<some return type>> Get()
    {
        _MOER = 32;

        return <<return a Json result/string of _MOER>>;
    }

我看到了Nuget包Newtonsoft.Json,可以用它来进行序列化/反序列化,但我不确定在.Net Core中是否仍然适用。

我也看到过一些使用JsonResult的例子,但当我尝试使用此方法时,编译器不知道Json()是什么。

    [HttpGet]
    public JsonResult Get()
    {
        _MOER = 32;

        return Json(_MOER);
    }

感谢您的帮助!

看起来你正在使用 [ApiController],为什么不直接返回 IActionResult 类型呢? - itminus
1个回答

17
将此属性添加到您的控制器类中:
[Produces("application/json")]

所以它变成了:

[Produces("application/json")]
public class YourController: Controller {

   [HttpGet]
   public IEnumerable<string> Get()
   {
       return new string[] { "value1", "value2" };
   }
}

这应该足够了,否则我认为默认的是XML(除非客户端使用Accept HTTP标头显式要求JSON)。


1
好的,但我想知道如何返回一个Json字符串,以便它返回类似于{"key":"value"}的内容。 - PKonstant
那么您需要更改您的方法,使其返回键/值类型,例如Dictionary<string, string>。字符串列表将仅被序列化为普通字符串数组。 - HaukurHaf
我能否只使用Newtonsoft.Json的Serialize/Deserialize来返回一个类?(你知道的,我不想返回"value1","value2") - PKonstant
哦,你是说如果我返回一个字典,那么它会作为一个 JSON 字符串返回。那这是否意味着所有由 Get 返回的东西都是 JSON 字符串? - PKonstant
是的,它总是会返回序列化为JSON的返回类型。如果您有一个名为Foo的类,其中包含两个字符串属性Bar和Baz,结果将会是:{"Bar": "bar的值", "Baz": "baz的值"}。快来试试吧! - HaukurHaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接