Не сериализуются internal поля

Мне нужно сохранить список List, который содержит экземпляры класса Inventory. Структура класса Inventory:

internal class Inventory
{
    // This class represents the player's inventory.

    internal int UserId { get; set; }
    
    internal Pet Pet { get; set; }
    internal Computer Computer { get; set; }
}

Классы Pet, Computer содержат аналогичные свойства. Для сериализации использую Newtonsoft.Json, вот код метода для десериализации:

    internal static void Write(List<Inventory> toSerialize)
    {
        string jsonText = JsonConvert.SerializeObject(
            toSerialize,
            Formatting.Indented
        );

        FileService.WriteString(jsonText);
    }

Но вместо ожидаемой структуры

[
  {
    "UserId": 12345,
    "Pet": {
      "Health": 100,
      "MoneyMultiplier": 0.2
    },
    "Computer": {
      "SupportHealth": 100
    }
  }
]

Я получаю строку такого вида:

[
    {
    
    }
]

Ответы (1 шт):

Автор решения: A K

У вас свойства объявлены как internal. Измените модификатор видимости на public, либо добавьте атрибут:

[JsonProperty]
internal int UserId { get; set; }

См. например тут: JSON Serializer object with internal properties

Я лично в последнее время не люблю эту ручную работу - поэтому предпочитаю задавать политики приложения и тому подобные вещи. В Json.Net можно настроить дефолтный резолвер, подробнее см. тут: JSON.Net: Force serialization of all private fields and all fields in sub-classes

→ Ссылка