- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个解决方案,其中包含一个 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/
这个问题已经有答案了: JsonConvert.DeserializeObject could not convert string to DateTime when using non-us dat
我有一个如下所示的 JSON 响应 { "msg": "1", "code": "2", "data": [ { "a": "3",
我想在我的应用程序加载时使用 JSON.Net 来处理配置文件的解析。将所有 KVP 保持在同一范围内绝对没问题。但是,我想将其分解为子类别,例如 Settings.WebServer、Setting
这个问题在这里已经有了答案: Deserializing nested JSON structure to a flattened class with Json.NET using annotat
我知道有很多关于 JSON 的问题遍布整个互联网和 StackOverflow。但是我无法让我的 JSON 正常工作,所以我希望我能在这里得到一些帮助。[使用 C#、Visual Studio] 我有
所有这些都来自https://github.com/JamesNK/Newtonsoft.Json/issues/469 发在这里是因为我先是在SO上看,没有看到任何东西,所以我在项目的GitHub页
我收到一个无效的强制转换异常,表明指定的强制转换无效。在这条线上: RootObject mountain = JsonConvert.DeserializeObject(json1); 来自docu
我有以下来自 Web 服务的 JSON 对象 { "room":{ "name":"Thunderdome", "created_at":"2012/04/15 00:3
我想将我现有的枚举属性标记为过时并添加新的以实现相同的功能。因此,我的项目中有两个枚举(新的和标记过时的)可用。 在使用 jsonconvert.deserializeobject 函数序列化此枚举值
我从网络请求中获取一个 JSON 编码的字符串。 字符串像这样返回 "{\"key\":\"value\"}" 当我尝试使用来自 JsonConvert 的 DeserializeObject 解析它
这个问题在这里已经有了答案: Json.NET case-sensitive deserialization (1 个回答) 关闭 6 年前。 我正在尝试将字符串内容反序列化为对象,但我希望内容区分
我有一些继承,需要自定义 JsonConverter 进行反序列化。我现在使用一种非常直接的方法,根据某些属性的存在来确定类型。 重要说明:在我的实际代码中,我无法触及DeserializeObjec
我有这样的 json 字符串输出: 字符串 apiResult = { "error":[], "result":{ "RARAGA":{ "a":["4",
这个问题在这里已经有了答案: Detect if deserialized object is missing a field with the JsonConvert class in Json.N
我有一个来自网络服务的结果,字符串结果是: {"status":"success","data":{"address":"aa@aa.aa","unconfirmed":[{"tx":"cb2f252
Newtonsoft.Json.DeserializeObject 会抛出哪些异常?我想处理它们。 http://james.newtonking.com/json/help/?topic=html/
我有以下类定义: public class Tag { public Guid? TagId { get; set; } public string TagText { get; se
我正在编写一个解决方案,其中包含一个 ASP.NET Web API (.NET 4.6.2)(又名后端)、一个 Web API 客户端实现 PCL(即中间件)和 Xamarin.Forms 项目(即
我有这个对象 public class ConversationAPI { [JsonProperty(PropertyName = "lU")] public DateTime La
在 Xamarin 项目中,我有包含以下代码的 PCL 库。 我们定义一个 ConcurrentQueue .消费者在对象初始化时为此 Task已附上: _syncConsumer = new Tas
我是一名优秀的程序员,十分优秀!