.Net Core WebAPI:使用不同的 json 序列化器选项来反序列化同一控制器中的请求体

Posted

技术标签:

【中文标题】.Net Core WebAPI:使用不同的 json 序列化器选项来反序列化同一控制器中的请求体【英文标题】:.Net Core WebAPI : use different json serializer option to deserialize request body in the same controller 【发布时间】:2021-07-07 09:37:46 【问题描述】:

我正在创建一个 .Net Core WebAPI (3.1),它需要能够根据请求正文的类型更改其 json 序列化程序设置。 我正在使用 Json.Net 而不是 System.Text.json。

public class MyController

    public virtual ActionResult<IEnumerable<TEntity>> GetFilteredEntities(int maxNResults, [FromBody] IFilter<TEntity> filter)
    ...
    public virtual ActionResult<TEntity> Update([FromBody] TEntity entity)

在我的示例中,TEntity 需要使用包含 PreserveReferencesHandling 选项的设置进行序列化,但 IFilter 不能。 我发现许多解决方案能够为响应切换 json 选项,但对于请求却没有。请问我怎样才能实现我的目标?

【问题讨论】:

【参考方案1】:

您可以在每个控制器方法中执行此操作。响应或请求,如果它们有类型,您可以对其进行序列化。

GetFilteredEntities

var Settings = new Newtonsoft.Json.JsonSerializerSettings

    PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Object
;
var TheJSON = Newtonsoft.Json.JsonConvert.SerializeObject(filter, filter.GetType().BaseType, Settings);

Update

var Settings = new Newtonsoft.Json.JsonSerializerSettings

    PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All
;
var TheJSON = Newtonsoft.Json.JsonConvert.SerializeObject(entity, entity.GetType().BaseType, Settings);

【讨论】:

我在几个控制器中有几个端点,我搜索了一个不强迫我手动处理每个动作的解决方案 @Karine 看看这是否有帮助 ***.com/questions/57927358/… 我认为这可能是更好、最便宜的解决方案

以上是关于.Net Core WebAPI:使用不同的 json 序列化器选项来反序列化同一控制器中的请求体的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core WebApi 中处理多个租户

.Net Core WebApi 如何使用 AD 进行授权

.Net Core WebAPI:使用不同的 json 序列化器选项来反序列化同一控制器中的请求体

net core WebApi——缓存神器Redis

ASP.Net Core WebApi几种版本控制对比

.NET Core Web API理解