【问题标题】:Wrong Serialization on LINQ Web APILINQ Web API 上的错误序列化
【发布时间】:2019-07-31 06:31:46
【问题描述】:

我有一个 LINQ 查询:

public List<tblStudent> GetNames()
{
    var result = (from student in db.tblStudents.ToList()
                  select new tblStudent 
                  {
                      StudentID = student.StudentID,
                      StudentName = student.StudentName,
                      Email = student.Email,
                      IsDeleted= student.IsDeleted

                      //tblDepartment = department.tblStudents
                  });
    return result.ToList();
}

当我执行该查询时,它给了我一个结果:

但我不想在结果中看到 null 值。我该如何解决这个问题?

【问题讨论】:

    标签: c# asp.net-mvc linq asp.net-web-api json.net


    【解决方案1】:

    虽然我没有尝试过,但我希望您能够将 Json.NET 配置为在序列化时忽略空值。在ConfigureServices 内写下:

    services.AddJsonFormatters(settings => settings.NullValueHandling = NullValueHandling.Ignore);
    

    使用匿名类型也可以,但是如果您有一个列表,其中 some 对象的某些属性具有非空值,而其他对象具有空值,则这会变得更加棘手。了解这两种方法是很好的,因此您可以在任何情况下使用更合适的方法。

    【讨论】:

      【解决方案2】:

      ApiController返回集合时,您可以使用匿名类型仅返回所需的成员

      例如

      public class MyApiController : ApiController {
      
          //...
      
          public IHttpActionResult MyControllerAction() {
              var result = myService.GetNames()
                          .Select(student => select new { //<-- Note what was done here
                                StudentID = student.StudentID,
                                StudentName = student.StudentName,
                                Email = student.Email,
                                IsDeleted= student.IsDeleted
                            });
              return Ok(result.ToList());
          }
      }
      

      【讨论】:

      • 它抛出了一个错误:当前上下文中不存在名称'Ok'
      • @HalilŞahin 我假设您是在ApiController 内拨打电话,因为您提到了基于问题标签的Web API。 GetNames()属于什么类型?
      • 它是一个 ApiController
      • @HalilŞahin 那么方法应该存在docs.microsoft.com/en-us/dotnet/api/…
      • @HalilŞahin 只是为了确保使用正确的版本,ApiController 是属性 [ApiController] 中的 asp.net-core,还是用作 @HalilŞahin 之类的基类987654328@ as in asp.net-web-api-2+
      【解决方案3】:

      我刚刚在我的WebApiConfig.cs 上添加了那行,我的问题已经解决了。

       config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        • 1970-01-01
        相关资源
        最近更新 更多