拉取数据时,我有,看起来像一个实体:Azure的移动客户端挂起向特定对象
public class Category : EntityData
{
[Index("IX_CategoryName", IsUnique = true), MaxLength(60)]
public string Name { get; set; }
public string CreatorId { get; set; }
[ForeignKey("CreatorId"), JsonIgnore]
public User Creator { get; set; }
[JsonIgnore]
public virtual ICollection<Choice> Choices { get; set; }
[JsonIgnore]
public virtual ICollection<UserCategory> Users { get; set; }
public string Password { get; set; }
public bool Private { get; set; }
}
我遇到了一些问题,物业检测自参照循环。我试了两种(单独和组合)
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
但没有运气。因此,我使用[JsonIgnore]标签,就像您在我的实体中看到的一样。就我所知,Azure移动服务甚至不会发送嵌套对象,所以没有理由对其进行序列化。但是,当我尝试拉取数据时,该过程永远不会返回。没有超时,没有例外..
奇怪的部分现在来。如果我和邮递员打电话给我,我会得到回复。
{
"name": "Food",
"creatorId": "nemtid",
"password": null,
"private": false,
"id": "707cc064-f797-40ee-9ef1-b235e447ff5f",
"version": "AAAAAAAAB9k=",
"createdAt": "2016-11-29T19:58:12.58Z",
"updatedAt": "2016-11-29T19:58:12.58Z",
"deleted": false
}
所以我想这是一个客户端的问题?..
我不知道我应该怎么调试这一线索,所以如果你有任何线索,无论是如何调试这一点,或另一种解决自我引用循环问题的方法,请让我知道。
编辑: 单方面的说明,使所有这一切更奇怪。 从我的客户端,如果我拉所有的数据没有问题(既没有代码挂起,也没有自我引用问题,我用[JsonIgnore]固定。因此,我可以拉动所有数据就好了,没有JsonIgnore)我的问题是与服务器上的此方法请求处理程序存在的:
public async Task<IEnumerable<Category>> GetSubscribedCategories(string userId, string subbedCats)
{
var res = _context.Categories.Where(c => c.Users.Select(u => u.UserId).Contains(userId));
return res;
}
这是一个实体框架问题比移动应用程序问题更多。编辑中的代码实际上并不使用任何移动应用程序SDK的内容。建议您重新标记特定的实体框架受众。 –
但问题是,当我调试服务器,我可以看到正确的数据,如果拉和返回。此外,如果我通过Postman手动发出请求,我也会得到正确的返回数据。这就是使这件事很难处理的原因。 – sirius
因此,您已经裁定服务器上的Azure移动应用程序代码正在做正确的事情。您可以假设您正在从客户端调用的服务器上的自定义API?你的代码在这方面不完整,所以我只能假设。 –