/// <summary> /// Сериализовать ссылку. /// </summary> /// <param name="link">Ссылка.</param> /// <returns>Ссылка в виде строки.</returns> public string Serialize(ILink link) { if (link == null) { return(null); } var serializer = ModuleProvider?.QueryModule <ILinkSerializer, Type>(link.GetTypeForSerializer()); if (serializer == null) { throw new ModuleNotFoundException($"Не найдена логика сериализации для ссылки типа {link.GetTypeForSerializer()?.FullName}"); } return(WithTypeId(serializer.Serialize(link), serializer.LinkTypeId)); }
/// <summary> /// Десериализовать ссылку. /// </summary> /// <param name="linkStr">Ссылка в виде строки.</param> /// <returns>Ссыока.</returns> public ILink Deserialize(string linkStr) { if (linkStr == null) { return(null); } (var data, var typeId) = ExtractTypeId(linkStr); var serializer = ModuleProvider?.QueryModule <ILinkSerializer, string>(typeId); if (serializer == null) { throw new ModuleNotFoundException($"Не найдена логика сериализации для ссылки типа \"{typeId}\""); } return(serializer.Deserialize(data)); }
private IObjectSerializer GetSerializer(string typeId) { if (typeId == null) { throw new ArgumentNullException(nameof(typeId)); } lock (_idCache) { if (!_idCache.ContainsKey(typeId)) { _idCache[typeId] = ModuleProvider.QueryModule <IObjectSerializer, string>(typeId) ?? throw new ModuleNotFoundException($"Не найдена логика сериализации типа TypeId=\"{typeId}\""); } return(_idCache[typeId]); } }
private IObjectSerializer GetSerializer(Type type) { if (type == null) { throw new ArgumentNullException(nameof(type)); } lock (_typeCache) { if (!_typeCache.ContainsKey(type)) { _typeCache[type] = ModuleProvider.QueryModule <IObjectSerializer, Type>(type) ?? throw new ModuleNotFoundException($"Не найдена логика сериализации типа {type.FullName}"); } return(_typeCache[type]); } }