C# 将嵌套对象从Blazor API返回到WASM
我正在学习Blazor,并用一个简单的图像查看器创建一个网站 我有以下类描述图像和任何相关标记:C# 将嵌套对象从Blazor API返回到WASM,c#,api,blazor,C#,Api,Blazor,我正在学习Blazor,并用一个简单的图像查看器创建一个网站 我有以下类描述图像和任何相关标记: public class GalleryImage { public int ID { get; set; } public string FileName { get; set; } public virtual ICollection<GalleryImageTag> ImageTags { get; set; } } public class Galler
public class GalleryImage
{
public int ID { get; set; }
public string FileName { get; set; }
public virtual ICollection<GalleryImageTag> ImageTags { get; set; }
}
public class GalleryImageTag
{
public int ID { get; set; }
public string Tag { get; set; }
public virtual ICollection<GalleryImage> GalleryImages { get; set; }
}
然后它失败了。如果我在返回时中断,那么galleryImages正确地包含galleryImages列表,并且任何已标记的都包括GalleryImageTags列表。但我在Chrome控制台中发现一个错误:
Gallery.OnInitializedAsync中出错:响应状态代码不表示成功:500(内部服务器错误)
我做错了什么
客户端和服务器都在使用.Net 5.0。您有一个循环引用。这将从数据库返回,但会导致序列化错误。您可以在其中一个集合上放置
[JsonIgnore]
属性,以防止循环序列化。这里的问题肯定是存在循环引用,其中图像和标记相互引用。你应该考虑发送一个引用只有一个方法的对象。<代码> [jsNeReun] < /Cord>在其中一个集合中停止循环序列化,谢谢,排序了。布莱恩·帕克如果你再加上这个答案,我就相信你了。
[HttpGet("GetGallery")]
public async Task<IActionResult> GetGallery()
{
List<GalleryImage> galleryImagesDB = await _context.GalleryImages
//.Include(a => a.ImageTags)
.ToListAsync();
return Ok(galleryImagesDB);
}
private List<GalleryImage> galleryImages = new();
protected override async Task OnInitializedAsync()
{
try
{
galleryImages = await Http.GetFromJsonAsync<List<GalleryImage>>("api/Gallery/GetGallery");
}
catch (Exception ex)
{
Console.WriteLine($"Error in Gallery.OnInitializedAsync : {ex.Message}");
}
}
.Include(a => a.ImageTags)