1

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

0

2 Answers 2

1

try this, it was tested and working properly

var jsonDeserialized = JsonConvert.DeserializeObject<Data>(json); 

classes

public class Data
{
    public Dictionary<string,Dictionary<string, Mode>> fareRule { get; set; }
    public Status status { get; set; }
}

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

public class DEFAULT
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string policyInfo { get; set; }
     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public double? amount { get; set; }
     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public double? additionalFee { get; set; }
     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public Dictionary<string,double?> fcs { get; set; }
}

public class NOSHOW
{
    public DEFAULT DEFAULT { 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 Mode
{
    public NOSHOW NO_SHOW { get; set; }
    public DATECHANGE DATECHANGE { get; set; }
    public CANCELLATION CANCELLATION { get; set; }
    public SEATCHARGEABLE SEAT_CHARGEABLE { get; set; }
}
Sign up to request clarification or add additional context in comments.

3 Comments

"DEL-BOM" is one not this is any sectors like NYC-DEL, CHI-NYC, etc.
Thanks @Serge you code working fine i have made small changes and its boom thanks man
@Dharmeshsharma "DEL-BOM" is not used, I just forgot to remove it from classes.
0

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);

1 Comment

problem is with public class FareRule { [JsonProperty(PropertyName = "DEL-BOM")] public DynamicBody DELBOM { get; set; } [JsonProperty(PropertyName = "NYC-BOM")] public DynamicBody NYCBOM { get; set; } } Because we have many combination like you search flight and we have lots of sectors its not a way to do like that. suppose user search BOM-NYC then i don't want to add all sectors here. That don't make sense.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.