Я работаю над проектом 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 (я думаю, что это из-за отношений, существующих в моих моделях)
, так что я должен сделать, чтобы решить это?Я не хочу переписывать их все.