Не сериализуются 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 шт):
У вас свойства объявлены как 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