首页 > 解决方案 > NewtonSoft JSON 反序列化:System.StackOverflowException

问题描述

JSON 反序列化失败并出现异常 System.StackOverflowException。

我正在尝试反序列化以下实体。需要帮助,为什么这会导致问题。

var workingJSONString = "{\"FBTOrLeaseYear\":{\"DateFrom\":\"2019-03-02T00:00:00\",\"DateTo\":\"2020-03-01T00:00:00\"},\"Registration\":\"155SQN\",\"NovatedLeaseFortnightBenefitGroups\":[],\"NovatedLeaseAnnualBenefitGroups\":[]}";

var exceptionJSONString = "{\"FBTOrLeaseYear\":{\"DateFrom\":\"2019-03-02T00:00:00\",\"DateTo\":\"2020-03-01T00:00:00\"},\"Registration\":\"155SQN\",\"NovatedLeaseFortnightBenefitGroups\":[{\"BenefitGroupID\":1,\"BenefitGroupName\":\"Fuel\",\"TotalAnnualBudgetAmount\":4992.0000,\"TotalFortnightBudgetAmount\":192.0000,\"TotalSpentToDate\":3327.43,\"TotalFortnightSpent\":141.59276595744680851063829788,\"TotalProjAnnualAmount\":3681.4119148936170212765957447,\"TotalVariationAmount\":1310.5880851063829787234042553,\"AverageSpentPercentage\":14.645499465811966666666666667,\"NovatedLeaseBudgetSpentDataForBenefits\":[]}],\"NovatedLeaseAnnualBenefitGroups\":[]}";

Test.Entities.NovatedLeaseBenefitsBudgetSpentFBTYear novatedLeaseBenefitsBudgetSpentFBTYearResponse = new Test.Entities.NovatedLeaseBenefitsBudgetSpentFBTYear();

novatedLeaseBenefitsBudgetSpentFBTYearResponse = JsonConvert.DeserializeObject<Test.Entities.NovatedLeaseBenefitsBudgetSpentFBTYear>(exceptionJSONString); // Exception is thrown here

实体:

关于“Test.Entities.NovatedLeaseBenefitsBudgetSpentFBTYear”实体的反序列化,

我收到一个异常"System.StackOverflowException"。谁能帮我解释一下为什么这个 JSON 的反序列化失败了。

public class NovatedLeaseBenefitsBudgetSpentFBTYear
{
    public FBTOrLeaseYear FBTOrLeaseYear { get; set; }
    public string Registration { get; set; }
    public List<NovatedLeaseBenefitGroup> NovatedLeaseFortnightBenefitGroups { get; set; }
    public List<NovatedLeaseBenefitGroup> NovatedLeaseAnnualBenefitGroups { get; set; }
}

 public class NovatedLeaseBenefitGroup
{
    public int BenefitGroupID { get; set; }
    public string BenefitGroupName { get; set; }
    public double TotalAnnualBudgetAmount { get; set; }
    public double TotalFortnightBudgetAmount { get; set; }
    public double TotalSpentToDate { get; set; }
    public double TotalFortnightSpent { get; set; }
    public double TotalProjAnnualAmount { get; set; }
    public double TotalVariationAmount { get; set; }
    public double AverageSpentPercentage { get; set; }
    public List<NovatedLeaseBudgetSpentDataForBenefit> NovatedLeaseBudgetSpentDataForBenefits { get; set; }
}

public class NovatedLeaseBudgetSpentDataForBenefit
{
    public int BenefitId { get; set; }
    public string BenefitName { get; set; }
    public double AnnualBudgetAmount { get; set; }
    public double FortnightBudgetAmount { get; set; }
    public double SpentToDate { get; set; }
    public double FortnightSpent { get; set; }
    public double ProjAnnualAmount { get; set; }
    public double VariationAmount { get; set; }
    public double SpentPercentage { get; set; }
}

public class FBTOrLeaseYear
{
    public string DateFrom { get; set; }
    public string DateTo { get; set; }
}

标签: c#jsondeserialization

解决方案


推荐阅读