JsonConvert.DeserializeObject<List<ConclusionEntityCategory>> is returning null objects in List

StackOverflow https://stackoverflow.com/questions/23523316

  •  17-07-2023
  •  | 
  •  

Question

I am new to Json.Net and am having a difficult time deserializing my Json objects into .Net objects. It creates ConclusionEntityCategory objects but those in turn contain null objects. My code is as follows:

const string catAndSubCat = @"[
    {
        ""Category"": ""risk factor"",
        ""SubCategory2"": [
            ""default"",""Minor risk factor"",""Major risk factor""
        ]
    },
    {
        ""Category"": ""intervention group"",
        ""SubCategory2"": [
            ""default"",""Minor risk factor"",""Major risk factor""
        ]
    }
]";

var c = JsonConvert.DeserializeObject<List<ConclusionEntityCategory>>(catAndSubCat);

Here is my class:

internal class ConclusionEntityCategory
{
    internal string Category { get; set; }
    internal string SubCategory1 { get; set; }
    internal List<string> SubCategory2 { get; set; }
}

The value of c is a List<ConclusionEntityCategory> with 2 ConclusionEntityCategory objects in the List. However, all of the properties within each of the ConclusionEntityCategory objects are null.

Any help with this problem would be greatly appreciate.

Was it helpful?

Solution

As a result of Category, SubCategory1, and SubCategory2 being internal, the serializer cannot set them. These need to be public properties in order to be populated.

internal class ConclusionEntityCategory
{
 public string Category { get; set; }
 public string SubCategory1 { get; set; }
 public List<string> SubCategory2 { get; set; }
}

OTHER TIPS

Try marking the internal properties on ConclusionEntityCategory with [JsonProperty] attribute, or if that is not desirable, set DefaultContractResolver.DefaultMemberSearchFlags to include non-public flag.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top