gpt4 book ai didi

c# - JsonConvert.DeserializeObject 上的 StackOverflowException

转载 作者:行者123 更新时间:2023-11-30 16:46:55 24 4
gpt4 key购买 nike

我正在编写一个解决方案,其中包含一个 ASP.NET Web API (.NET 4.6.2)(又名后端)、一个 Web API 客户端实现 PCL(即中间件)和 Xamarin.Forms 项目(即前端)。在最近对我的 web api 进行更改之后,当我尝试在前端反序列化 JSON 响应时,我现在总是会收到 StackOverflowException。具体行是:

result_ = JsonConvert.DeserializeObject<ObservableCollection<Employee>>(Encoding.UTF8.GetString(responseData_, 0, responseData_.Length));

当我在这里调试时,我看到程序在两行之间跳转,直到发生溢出:

EmployeesManager.cs(在中间件中)

private Image _image = new Image();

ImagesManager.cs(在中间件中)

private Employee _employee = new Employee();

这里是更多的代码:

模型(在 Web API 中):

public class Employee
{
public int Id { get; set; }

// OMITTED PROPS

public int? ImageId { get; set; }
public Image Image { get; set; }

public ICollection<Device> Devices { get; set; }

public int? TeamId { get; set; }
public Team Team { get; set; }
}

public class Image
{
[Key]
public int Id { get; set; }

[Required]
public byte[] Data { get; set; }

public int EmployeeId { get; set; }

public Employee Employee { get; set; }
}

客户端实现(中间件)中的模型。它们是用 Nswag 生成的:

public partial class Employee : INotifyPropertyChanged
{
private int _id;

private int? _imageId;
private Image _image = new Image(); // THIS LINE IS PART OF THE OVERFLOW
private ObservableCollection<Device> _devices;
private int? _teamId;
private Team _team = new Team();

// OMITTED PROPS

[JsonProperty("image", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
public Image Image
{
get { return _image; }
set
{
if (_image != value)
{
_image = value;
RaisePropertyChanged();
}
}
}

public partial class Image : INotifyPropertyChanged
{
private int _id;
private int _employeeId;
private Employee _employee = new Employee(); // THIS LINE IS PART OF THE STACK OVERFLOW
private byte[] _data;

// OMITTED PROPS

[JsonProperty("employee", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
public Employee Employee
{
get { return _employee; }
set
{
if (_employee != value)
{
_employee = value;
RaisePropertyChanged();
}
}
}

我通过 Xamarin.Forms 项目使用 Web API 客户端实现。该行为在所有平台上都相同。不过,只有 iOS 和 UWP 可以识别 Stack Overflow。在 Android 上,当我从 Web API 读取数据时,应用程序会无异常地关闭。

如果有人想查看更多代码,我可以准备一个包含所请求代码的小包。将它们全部张贴在这里会完全破坏可读性。

我使用 Newtonsoft Json.NET、 Entity Framework 6、NSwag 6、Xamarin.Forms v2.3.2.127。

最佳答案

我以前也遇到过这种情况;这是由于对象之间的循环引用。您有一个 Employee references Image 和 Image referenceing Employee。

尝试将 [JsonIgnore] 放在图像类 Image 的 Employee 属性之上。

关于c# - JsonConvert.DeserializeObject 上的 StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com