c# - Xamarin Forms api 调用不返回包含在 json 字符串中的相关实体
问题描述
在我的 ApiController 中有以下内容,它可以工作
[HttpPost]
[AllowAnonymous]
public IEnumerable<GridPost> LoadDashboardAsync()
{
IEnumerable<GridPost> posts = _repo.GridPostRepository()
.Include(m => m.LastModifiedByUser)
.Where(a => a.IsActive == true)
.OrderByDescending(s => s.DateLastModified);
return posts;
}
我可以打断点并看到我命名为“posts”的 IEnumerable 包含相关的用户记录(LastModifiedByUser 是一个相关用户记录的 FK 的导航属性,而不是列表/集合)。到目前为止,这方面的一切看起来都不错。
然后,我从 Xamarin Forms 项目中的 ViewModel 调用此 API。这适用于帖子(GridPost 实体本身)。它在 XAML 页面的我的 ListView 中加载和反序列化并显示得很好,除了相关实体根本没有出现。设置断点时,甚至在到达下图最后一行进行反序列化之前,ReadAsStringAsync() 函数返回的 jsonRead 不包含相关的用户实体(有一个 UserID FK 字段确实包含 ID,但导航属性包含服务器上相关用户的内容没有在此 json 字符串中返回 - 它为空)。那么问题来了,为什么从服务器返回到客户端时相关用户消失了?
Task<HttpResponseMessage> response = _apiClient.SendAsync(loadChallenges);
HttpResponseMessage _completed = await response;
HttpContent jsonReturned = _completed.Content;
var jsonRead = await jsonReturned.ReadAsStringAsync();
Posts = JsonConvert.DeserializeObject<ObservableCollection<GridPostModel>>(jsonRead) as ObservableCollection<GridPostModel>;
从 ReadAsStringAsync() 分配后立即在 jsonRead 变量中返回 JSON 的示例
[{"$id":"1","title":"One and done","LastModifiedByUserId":"32e19260-7313-4eba-99b8-61077aced7a3","lastModifiedByUser":null}]
解决方案
推荐阅读
- mysql - 如果一个值被另一个表中的范围覆盖,则 MySQL 更新列
- scala - Scala条件累加
- excel - 在打开 excel 而不是更改值时执行 VBA 代码
- .htaccess - 不同用户的假子域,同时仍然浏览相同的文件夹结构
- django - 从 FullCalendar 和 Django 中删除事件
- javascript - 使用 div 和脚本的另一个 HTML 代码块更改内部 HTML
- swift - 如何创建apple watchOS5 并发症?
- octave - Octave 4.4.1 无法在 32 位 Windows 7 上启动
- angularjs - 如何为第二个控制器测试 mdDialog w/o mock?
- c# - 编辑下拉列表不显示模型的值