我在使用 Entity Framework 5 Code First 数据库和 Json 序列化时遇到了这个特殊的问题。
我有一个具有以下用户类的数据库
public class User
{
[Key()]
[HiddenInput(DisplayValue=false)]
public int UserId { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string DisplayName { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[ScaffoldColumn(false)]
public virtual Outfit ProfileOutfit { get; set; }
[ScaffoldColumn(false)]
public virtual PoseAnimation ProfilePose { get; set; }
[ScaffoldColumn(false)]
public virtual Mannequin ProfileMannequin { get; set; }
[ScaffoldColumn(false)]
public virtual ICollection<int> SubscribedTo { get; set; }
[ScaffoldColumn(false)]
public virtual ICollection<Fashionshow> Fashionshows { get; set; }
[ScaffoldColumn(false)]
public virtual ICollection<Outfit> Outfits { get; set; }
[ScaffoldColumn(false)]
public virtual ICollection<Snapshot> Snapshots { get; set; }
[ScaffoldColumn(false)]
public virtual ICollection<Achievement> Achievements { get; set; }
}
我的 DbContext 中有这个:
public class SilkDbContext9 : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<News> News { get; set; }
public DbSet<Outfit> Outfits { get; set; }
public DbSet<Fashionshow> Fashionshows { get; set; }
public DbSet<Entry> Entries { get; set; }
public DbSet<Location> Locations { get; set; }
public DbSet<Sound> Sounds { get; set; }
public DbSet<Snapshot> Snapshots { get; set; }
public DbSet<OutfitPart> OutfitParts { get; set; }
public DbSet<Mannequin> Mannequins { get; set; }
public DbSet<PoseAnimation> PoseAnimations { get; set; }
public DbSet<WalkAnimation> WalkAnimations { get; set; }
public DbSet<Achievement> Achievements { get; set; }
public DbSet<ConstructOutfit> ConstructOutfits { get; set; }
public DbSet<DesignOutfit> DesignOutfits { get; set; }
}
现在,当我通过 ApiController 请求 localhost 环境中的用户类(例如使用 Visual Studio 进行调试)时,它可以工作并返回一个用户列表或一个用户列表。但是,当我在将其部署到的服务器上请求它时,我得到以下对象:
{"$id":"1","Message":"An error has occurred."}
我不知道如何做到这一点。我已经尝试从其他对象中删除对 User 类的所有引用,以防某处出现无限循环,但这没有帮助。我还尝试关闭并打开这段代码(也没有帮助):
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
我猜我从转换为 JSON 中得到了错误,因为错误没有在 get 方法中捕获。
简而言之,我有一个对象可以在本地主机上序列化为 Json,但不在我的 IIS 服务器上。如何解决这个问题?
更新
我无法记录它(据我所知,我对 IIS 并不熟悉),因为我的 API 中的 get 方法似乎有效。这里是:
public IEnumerable<object> GetUsers()
{
IEnumerable<User> users;
try
{
users = db.Users.AsEnumerable();
}
catch
{
return new List<string>() { "Error getting the collection" };
}
try
{
return users;
}
catch
{
return new List<string>() { "Error returning the collection" };
}
}
由于没有返回任何错误字符串,我猜测返回的是实际用户,并且序列化到 JSON 是错误的。我通过转到 /api/users 来获取用户。