Search code examples
c#.netjsonjson.netdeserialization

JSON.NET Case Insensitive Deserialization not working


I need to deserialize some JSON into my object where the casing of the JSON is unknown/inconsistent. JSON.NET is supposed to be case insensitive but it not working for me.

My class definition:

public class MyRootNode
{
    public string Action {get;set;}
    public MyData Data {get;set;}
}

public class MyData
{
    public string Name {get;set;}
}

The JSON I receive has Action & Data in lowercase and has the correct casing for MyRootNode.

I'm using this to deserialize:

MyRootNode ResponseObject = JsonConvert.DeserializeObject<MyRootnode>(JsonString);

It returns to be an initialised MyRootNode but the Action and Data properties are null.

Any ideas?

EDIT: Added JSON

{
   "MyRootNode":{
      "action":"PACT",
      "myData":{
         "name":"jimmy"
      }
   }
}

Solution

  • You need to add an additional class:

    public class MyRootNodeWrapper
    {
        public MyRootNode MyRootNode {get;set;}
    }
    

    and then use:

    MyRootNodeWrapperResponseObject = JsonConvert.DeserializeObject<MyRootNodeWrapper>(JsonString);
    

    https://stackoverflow.com/a/45384366/34092 may be worth a read. It is basically the same scenario.

    Also, change:

    public MyData Data {get;set;}
    

    to:

    public MyData MyData {get;set;}
    

    as per advice from @demo and @Guy .