Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制ASP.Net Core 2.0的序列化设置,返回IActionResult_C#_Asp.net Web Api_.net Core - Fatal编程技术网

C# 控制ASP.Net Core 2.0的序列化设置,返回IActionResult

C# 控制ASP.Net Core 2.0的序列化设置,返回IActionResult,c#,asp.net-web-api,.net-core,C#,Asp.net Web Api,.net Core,我已经创建了一个ASP.NET 2.0 webapi,并试图从一个返回IActionResult的方法返回一个抽象类型,即 // GET api/trades/5 [HttpGet("{id}", Name = "GetTrade")] [ProducesResponseType(typeof(Trade), 200)] [ProducesResponseType(404)] public IActionResult Get(int id) {

我已经创建了一个ASP.NET 2.0 webapi,并试图从一个返回IActionResult的方法返回一个抽象类型,即

    // GET api/trades/5
    [HttpGet("{id}", Name = "GetTrade")]
    [ProducesResponseType(typeof(Trade), 200)] 
    [ProducesResponseType(404)]
    public IActionResult Get(int id)
    {
        var item = _context.Trades.FirstOrDefault(trade => trade.Id == id);
        if (item == null)
        {
            return NotFound();
        }
        return Ok(item);
    }
交易类型是一个抽象基类,我希望序列化的JSON包含$type属性,以便客户端可以反序列化为正确的具体类型。如果我将方法更改为return Trade(返回的json包含一个带有具体类型名称的$type属性),而不是IActionResult(没有$type属性),下面的代码将控制输出序列化器

得到

{
  "id": 1,
  "createdDateTime": "2018-04-12T15:59:11.3680885+12:00"
  ...
}
以下工作与预期相符

    // GET api/trades
    [HttpGet]
    public IEnumerable<Trade> Get()
    {
        return _context.Trades.ToList();
    }
//获取api/trades
[HttpGet]
公共IEnumerable Get()
{
return_context.Trades.ToList();
}
问候
Dave将TypeNameHandling从
Auto
更改为
Objects
将强制JSON序列化程序始终发出类型名

请将您的TypeNameHandling从

options.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;


请包含一些返回给JS客户端的预期和实际json对象结构。这将有助于每个人将您的问题可视化。我已按要求进行了编辑(客户端是.Net而不是JS),您可以尝试使用此选项
options.SerializerSettings.typenameholling=typenameholling.Objects
谢谢,这似乎一直有效。添加为正确的解决方案,我将其标记为答案。@user2981639默认情况下,web api使用JSON.NET序列化程序设置作为
TypeNameHandling。无
,因此不包括$type,您可以根据需要更改它。
    // GET api/trades
    [HttpGet]
    public IEnumerable<Trade> Get()
    {
        return _context.Trades.ToList();
    }
options.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
options.SerializerSettings.TypeNameHandling = TypeNameHandling.Objects