Class DictionaryAttributeValues
Абстрактный класс для работы с типизированными значениями атрибутов как с нетипизированными, плюс для возможности их сериализации в типизированном виде. Представляет собой недомапу.
Namespace: Trivium.DictionariesDto.Common.AttributeValues
Assembly: Trivium.DictionariesDto.dll
Syntax
[JsonConverter(typeof(JsonGenericInheritanceConverter), new object[]{"discriminator"})]
[KnownType(typeof(DictionaryAttributeSingleValues<int>))]
[KnownType(typeof(DictionaryAttributeSingleValues<double>))]
[KnownType(typeof(DictionaryAttributeSingleValues<DateTime>))]
[KnownType(typeof(DictionaryAttributeSingleValues<bool>))]
[KnownType(typeof(DictionaryAttributeSingleValues<string>))]
[KnownType(typeof(DictionaryAttributeSingleValues<ElementType>))]
[KnownType(typeof(DictionaryAttributeSingleValues<Permissions>))]
[KnownType(typeof(DictionaryAttributeSingleValues<Guid>))]
[KnownType(typeof(DictionaryAttributeSingleValues<long>))]
[KnownType(typeof(DictionaryAttributeSingleValues<DictionaryElementOperationType>))]
[KnownType(typeof(DictionaryAttributeSingleValues<FileLinkDto[]>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<int>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<double>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<DateTime>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<bool>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<string>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<Guid>))]
[KnownType(typeof(DictionaryAttributeMultipleValues<long>))]
public abstract class DictionaryAttributeValues
Remarks
Нельзя понаследоваться от IDictionary<int, object>, т.к. тогда сериализатор работает через этот интерфейс, и получается то, от чего уходим - пишется тип для каждого value. Это можно поменять через использование кастомного Newtonsoft.Json.JsonSerializerSettings.ContractResolver, но тогда этот резолвер должен быть общим для движка и для справочников; возможно, в дальнейшем можно будет двинуться в эту сторону. То же самое относится и к IEnumerable, поэтому и для него и для мапы добавлены отдельные методы, а также добавлены дополнительные вещи типа кэшированной обертки, которая как раз реализует интерфейс мапы. Также некоторые вещи вроде Count, Keys и т.п. добавлены методами, а не свойствами, чтобы не вешать на эти свойства атрибуты Newtonsoft.Json.JsonIgnoreAttribute. Для работоспособности сгенерированного внешнего клиента (ts, C#) пришлось добавить конвертер и KnownType; вообще, конечно, нужно бы все это как-то по-другому сделать...
Properties
bool | IsMultiple Возвращает признак множественности для значения атрибута. |
|
int | Item[Int32] Индексатор. |