首页 > 解决方案 > 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}]

标签: c#jsonapixamarin

解决方案


推荐阅读