У меня проблемы с получением новой System.Text.Json
для десериализации коллекций, хранящихся в свойствах только для чтения.
Рассмотрим следующие классы:
public class SomeItem {
public string Label { get; set; }
}
public class SomeObjectWithItems {
public string Label { get; set; }
// Note this property is read-only but the collection it points to is read/write
public ObservableCollection<SomeItem> Items { get; }
= new ObservableCollection<SomeItem>();
}
Вот JSON:
{
"Label": "First Set",
"Items": [
{
"Label": "Item 1"
},
{
"Label": "Item 2"
},
{
"Label": "Item 3"
},
{
"Label": "Item 4"
}
]
}
Вот код, который я запускаю ...
var json = ...;
var obj = JsonSerializer.deserialize<SomeObjectWithItems>(json);
Debug.WriteLine($"Item Count for '{obj.label}': {obj.Items.Count}");
Выше приведено следующее:
Item Count for 'First Set': 0
Если я изменю Items
на чтение / запись, тогда это работает, но многие из наших моделей имеют свойства только для чтения, которые содержат изменяемые коллекции, поэтому мне интересно, сможем ли мы вообще использовать это.
Примечание: Json. NET обрабатывает это правильно, внутренне вызывая метод «Добавить» в существующей коллекции, а не создавая новую, но я не знаю, как этого добиться вне письменности пользовательские конвертеры для всех классов, которые мы определили.