首页 > 解决方案 > C# Web API 方法 Json 序列化

问题描述

我正在做一个C# web Api Method和消费者。

首先,该方法检索一个类实例,消费者像这样调用它,并将其解析为一个名为R

HttpResponseMessage response = client.PostAsJsonAsync(url, param).Result;
R value = await response.Content.ReadAsJsonAsync<R>();

现在,我需要从我的 Api 中检索它具有数据的类属性。因此,正如我在这里问的那样,它将类实例解析为 Json ,使用

 string jsonIgnoreNullValues = JsonConvert.SerializeObject(response, Formatting.Indented, new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

我的网络方法定义很简单

   public IHttpActionResult Newemployee([FromBody] RequestManual items)
    {
         ResponseManual response = Service.Newemployee(items.Datos);
         //Before
          return Ok(response);

          //Now
           string jsonIgnoreNullValues = JsonConvert.SerializeObject(response, Formatting.Indented, new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });
          return Ok(jsonIgnoreNullValues);
    }

}

.NET在响应中自动序列化为Json,当我序列化响应以避免空属性时,响应被序列化两次......

如何避免这种情况,或者我该如何阅读?

谢谢

标签: c#jsonasp.net-web-apiserialization

解决方案


在启动时配置格式化程序。Web API 使用 Json.Net 框架,因此您可以访问相同的序列化设置

WebApiConfig.cs

var jsonFormatter = config.Formatters.JsonFormatter
jsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore

这样您就可以像以前一样使用原始代码

[HttpPost]
public IHttpActionResult Newemployee([FromBody] RequestManual items) {
    if(ModelState.IsValid) {
        var response = Service.Newemployee(items.Datos);
        return Ok(response);
    }
    return BadRequest(ModelState);
}

推荐阅读