Хорошо, мы используем продукт Newtonsoft JSON.NET, который мне очень нравится. Однако у меня есть простая структура классов для иерархических расположений, которые выглядят примерно так ...
public class Location
{
public string Name{ get; set; }
public LocationList Locations{ get; set; }
}
// Note: LocationList is simply a subclass of a List<T>
// which then adds an IsExpanded property for use by the UI.
public class LocationList : List<Location>
{
public bool IsExpanded{ get; set; }
}
public class RootViewModel
{
public LocationList RootLocations{ get; set; }
}
... и когда я их сериализую в JSON, все работает отлично, за исключением исключения свойства IsExpanded в классе LocationList. Сериализуется только содержимое списка.
Вот то, что я предполагаю, было бы хорошим форматом. По сути, это то же самое, как если бы LocationList
не был подклассом List
, а был просто обычным объектом со свойством под названием Items
of вместо этого введите List
.
{
"Locations":
{
"IsExpanded": true,
"Items": [
{
"Name": "Main Residence",
"Locations":
{
"IsExpanded": true,
"Items": [
{
"Name": "First Floor",
"Locations":
{
"IsExpanded": false,
"Items": [
{
"Name": "Livingroom"
},
{
"Name": "Dining Room"
},
{
"Name": "Kitchen"
}
]
},
{
"Name": "Second Floor",
"Locations":
{
"IsExpanded": false,
"Items": [
{
"Name": "Master Bedroom"
},
{
"Name": "Guest Bedroom"
}
]
},
{
"Name": "Basement"
}
]
}
}
]
}
}
Теперь я также понимаю, что Newtonsoft ' Продукт является расширяемым, потому что в них конкретно говорится о том, как вы можете написать свой собственный сериализатор для определенных типов данных, что было бы именно тем, что я хотел бы здесь. Однако у них нет хороших примеров кода, как это сделать.
Если мы (сообщество SO) сможем это выяснить, технически с помощью вышеуказанного формата мы сможем сериализовать ЛЮБОЙ подкласс List (или его производные / аналогичные объекты) при условии, что у них еще нет свойства с именем Items
(который, ИМХО, был бы плохим дизайном в первую очередь, так как это сбивало бы с толку, как дерьмо!) Возможно, мы даже сможем заставить Newtonsoft встроить такую вещь в свой сериализатор изначально!
Итак, это сказано. .. кто-нибудь знает, как настроить сериализатор / десериализатор для обработки этого объекта по-другому?
M