void IRegisterEventDeserializers.Register(Type scope, string type, int version, Func <JObject, IReadOnlyMetadata, IEnumerable <Event> > deserializer, CreatePreprocessor preprocessor) { preprocessor = preprocessor ?? DefaultPreprocessor; IEnumerable <Event> Deserialize(string scopeIdentity, byte[] data, IReadOnlyMetadata metadata) { if (!preprocessor(scopeIdentity)(data, out var processed)) { return(EmptyEventArray); } var json = ReadJson(processed); return(deserializer(json, metadata)); } if (!_eventDeserializers.TryGetValue(scope, out var deserializers)) { deserializers = new Dictionary <TypeAndVersion, Func <string, byte[], IReadOnlyMetadata, IEnumerable <Event> > >(); _eventDeserializers[scope] = deserializers; } var tv = new TypeAndVersion(type, version); if (deserializers.ContainsKey(tv)) { throw new InvalidOperationException( $"Deserializer already registered for {type} with {version} in scope {(scope == typeof(object) ? "(global)" : scope.FullName)}"); } deserializers.Add(tv, Deserialize); }
public T Deserialize(string messageData, IMetaData metaData) { var typeAndVersion = new TypeAndVersion(metaData.MessageType, metaData.MessageTypeVersion); if (!_configuration.ContainsKey(typeAndVersion)) { throw new InvalidOperationException("Invalid version"); } return((T)JsonConvert.DeserializeObject(messageData, _configuration[typeAndVersion])); }