.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 序列化器选项来反序列化同一控制器中的请求体的主要内容,如果未能解决你的问题,请参考以下文章