Esempio n. 1
0
        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]));
    }