3
votes

Mauvaise sérialisation sur l'API Web LINQ

J'ai une requête LINQ comme celle-ci:

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();
}

Lorsque j'ai exécuté cette requête, cela m'a donné le résultat:

 Mon résultat a>

Mais je ne veux pas voir de valeurs nulles dans mon résultat. Comment puis-je résoudre ce problème?


0 commentaires

3 Réponses :


3
votes

Vous pouvez utiliser un type anonyme pour renvoyer uniquement les membres souhaités lors du retour de la collection depuis le ApiController

Par exemple

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());
    }
}


7 commentaires

Il a jeté une erreur comme suit: Le nom 'Ok' n'existe pas dans le contexte actuel


@ HalilŞahin J'ai supposé que vous faisiez l'appel dans un ApiController comme vous avez mentionné l'API Web basée sur les balises de la question. À quel type appartient GetNames () ?


c'est un ApiController


@ HalilŞahin alors la méthode devrait exister docs.microsoft.com/en-us/dotnet/api/...


@ HalilŞahin juste pour s'assurer que la bonne version est utilisée, est le ApiController dans un attribut [ApiController] comme dans asp.net-core, ou est-il utilisé comme un classe de base comme MyController: ApiController comme asp.net-web-api-2 +


mon projet n'est pas un projet .NetCore. et ma classe actuelle implémentée à partir d'une interface. Et mon contrôleur étendu d'ApiController


continuons cette discussion dans le chat .



4
votes

Bien que je ne l'ai pas essayé, je m'attendrais à ce que vous puissiez configurer Json.NET pour ignorer les valeurs nulles lors de la sérialisation. Dans ConfigureServices , écrivez ceci:

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

Utiliser un type anonyme à la place fonctionnerait aussi, mais cela devient plus compliqué si vous avez une liste où certains em > les objets ont des valeurs non nulles pour certaines propriétés, et d'autres objets ont des valeurs nulles. Il est bon d'être conscient des deux approches, afin que vous puissiez utiliser celle qui convient le mieux à n'importe quelle situation.


0 commentaires

2
votes

Je viens d'ajouter cette ligne sur mon WebApiConfig.cs et mon problème a été résolu.

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


0 commentaires