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

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

  •  17-07-2023
  •  | 
  •  

Вопрос

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.

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top