'json dynamic node parse in C#

I am receiving json with dynamic one node based on sector like "DEL-BOM", "NYC-BOM". trying to parse but body getting null. I just add Dictionary and key as node and class as value but still not getting values in DeserializeObject.

{
    "fareRule": {
        "DEL-BOM": {
            "fr": {
                "NO_SHOW": {
                    "DEFAULT": {
                        "policyInfo": "If Cancelled within 6 hrs of scheduled departure only statutory taxes will be Refunded."
                    }
                },
                "DATECHANGE": {
                    "DEFAULT": {
                        "amount": 3000.00,
                        "additionalFee": 50.00,
                        "policyInfo": "__nls__Changes permitted 06 Hrs before scheduled departure  __nls__ Within 06-96 hrs Rs 3,000 + Fare Difference __nls__ Before 96 hrs Rs 2,500 + Fare Difference",
                        "fcs": {
                            "CRFT": 9.00,
                            "ARF": 3000.00,
                            "ARFT": 150.00,
                            "CRF": 50.00
                        }
                    }
                },
                "CANCELLATION": {
                    "DEFAULT": {
                        "amount": 3500.00,
                        "additionalFee": 50.00,
                        "policyInfo": "__nls__Cancellation permitted 06 Hrs before scheduled departure __nls__ Within 06-96 hrs Rs 3,500 __nls__ Before 96 hrs Rs 3,000",
                        "fcs": {
                            "ACFT": 175.00,
                            "CCFT": 9.00,
                            "ACF": 3500.00,
                            "CCF": 50.00
                        }
                    }
                },
                "SEAT_CHARGEABLE": {
                    "DEFAULT": {
                        "policyInfo": "Paid Seat"
                    }
                }
            }
        }
    },
    "status": {
        "success": true,
        "httpStatus": 200
    }
}

this is my class

public class Response
    {
        public Dictionary<string, Fr> fareRule { get; set; }
        public Status status { get; set; }
    }

    public class DEFAULT
    {
        public string policyInfo { get; set; }
        public double amount { get; set; }
        public double additionalFee { get; set; }
        public Fcs fcs { get; set; }
    }

    public class NOSHOW
    {
        public DEFAULT DEFAULT { get; set; }
    }

    public class Fcs
    {
        public double ARFT { get; set; }
        public double ARF { get; set; }
        public double CRFT { get; set; }
        public double CRF { get; set; }
        public double CCF { get; set; }
        public double ACF { get; set; }
        public double CCFT { get; set; }
        public double ACFT { get; set; }
    }

    public class DATECHANGE
    {
        public DEFAULT DEFAULT { get; set; }
    }

    public class CANCELLATION
    {
        public DEFAULT DEFAULT { get; set; }
    }

    public class SEATCHARGEABLE
    {
        public DEFAULT DEFAULT { get; set; }
    }

    public class Fr
    {
        public NOSHOW NO_SHOW { get; set; }
        public DATECHANGE DATECHANGE { get; set; }
        public CANCELLATION CANCELLATION { get; set; }
        public SEATCHARGEABLE SEAT_CHARGEABLE { get; set; }
    }

    public class Sector
    {
        public Fr fr { get; set; }
    }

    public class FareRule
    {

        public Sector sector { get; set; }
    }

    public class Status
    {
        public bool success { get; set; }
        public int httpStatus { get; set; }
    }

I have tried based on Parse dynamic JSON

Key is converting but body or value is null. enter image description here



Solution 1:[1]

Use Newtonsoft.Json for deserialization Your Correct Model is.

public class DATECHANGE
{
    public DEFAULT DEFAULT { get; set; }
}

public class CANCELLATION
{
    public DEFAULT DEFAULT { get; set; }
}

public class SEATCHARGEABLE
{
    public DEFAULT DEFAULT { get; set; }
}

public class Fr
{
    public NOSHOW NO_SHOW { get; set; }

    public DATECHANGE DATECHANGE { get; set; }
    
    public CANCELLATION CANCELLATION { get; set; }
    
    public SEATCHARGEABLE SEAT_CHARGEABLE { get; set; }
}

public class FareRule
{
    [JsonProperty(PropertyName = "DEL-BOM")]
    public DynamicBody DELBOM { get; set; }

    [JsonProperty(PropertyName = "NYC-BOM")]
    public DynamicBody NYCBOM { get; set; }
}

public class Status
{
    public bool Success { get; set; }

    public int HttpStatus { get; set; }
}

public class BaseResponseModel
{
    public FareRule FareRule { get; set; }

    public Status Status { get; set; }
}

public class DynamicBody
{
    public Fr Fr { get; set; }
}

Then Deserialize like this code

var responseModel = JsonConvert.DeserializeObject<BaseResponseModel>(jsonStr);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Artur Ghazaryan