【问题标题】:.Net Core WebAPI : use different json serializer option to deserialize request body in the same controller.Net Core WebAPI:使用不同的 json 序列化器选项来反序列化同一控制器中的请求体
【发布时间】: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 选项,但对于请求却没有。请问我怎样才能实现我的目标?

【问题讨论】:

    标签: c# json json.net asp.net-core-webapi jsonserializer


    【解决方案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 看看这是否有帮助 stackoverflow.com/questions/57927358/…
    • 我认为这可能是更好、最便宜的解决方案
    猜你喜欢
    • 2022-06-30
    • 2016-08-31
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多