NewtonSoft JSON Десериализация: System.StackOverflowException - PullRequest
0 голосов
/ 01 февраля 2020

Сбой десериализации 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; }
}
...