WebApi не может сериализовать сущности Entity Framework - PullRequest
0 голосов
/ 29 мая 2018

Я работаю над проектом WebApi и хочу сериализовать List<User> и отправить его обратно пользователю.Но он просто возвращает [{"$id":"1"}], где User - это сущность, сгенерированная классами моделей, основанных на базе данных Entity Framework.

Контроллер:

public List<User> GetAllUsers() 
{ 
   List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User>
                     .GetAll().ToList(); 
  return Users; 
}

Вот класс User:

 public partial class User
 {
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
      public User()
      {
          this.ContentLikes = new HashSet<ContentLikes>();
          this.ContentPermission = new HashSet<ContentPermission>();
          this.File = new HashSet<File>();
          this.FolderPermission = new HashSet<FolderPermission>();
          this.SiteUsers = new HashSet<SiteUsers>();
          this.UserGroup = new HashSet<UserGroup>();
      }

      public long ID { get; set; }
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public string Email { get; set; }
      public string UserName { get; set; }
      public string Password { get; set; }
      public Nullable<long> DiskUsed { get; set; }
      public Nullable<long> DiskUsage { get; set; }
      public Nullable<bool> Status { get; set; }

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<ContentLikes> ContentLikes { get; set; }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<ContentPermission> ContentPermission { get; set; }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<File> File { get; set; }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<FolderPermission> FolderPermission { get; set; }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<SiteUsers> SiteUsers { get; set; }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
      public virtual ICollection<UserGroup> UserGroup { get; set; }
 }

Я добавил эти строки кодов в файл WebApiConfig.cs.

 var json = config.Formatters.JsonFormatter;
 json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
 config.Formatters.Remove(config.Formatters.XmlFormatter);

это просто разрешило двойную сериализацию.и у меня есть моя старая проблема.я получу $id : "1" когда отправлю запрос на мой ActionMethod.

я узнал, что это из-за EntityFramework.потому что WebApi не может сериализовать EntityFramework Entity (я думаю, что это из-за отношений, существующих в моих моделях)

, так что я должен сделать, чтобы решить это?Я не хочу переписывать их все.

1 Ответ

0 голосов
/ 29 мая 2018

Попробуйте это

public IHttpActionResult GetAllUsers()
        {
            try
            {
                List<User> Users = Common.Framework.Persistence.PersistSvr<Business.Entity.User>
                                   .GetAll().ToList(); 
                return Ok(Users);

            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.InternalServerError, ex.Message);

            }
        }

Вы получите ответ в виде json вместе с кодом состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...