NServiceBus.JsonMessageSerializer.Deserialize C# (CSharp) Method

Deserialize() public method

Deserializes from the given stream a set of messages.
public Deserialize ( Stream stream, IList messageTypes ) : object[]
stream Stream Stream that contains messages.
messageTypes IList /// The list of message types to deserialize. If null the types must be inferred from the /// serialized data. ///
return object[]
        public object[] Deserialize(Stream stream, IList<Type> messageTypes)
        {
            Guard.AgainstNull(nameof(stream), stream);
            var settings = serializerSettings;

            var mostConcreteType = messageTypes?.FirstOrDefault();
            var requiresDynamicDeserialization = mostConcreteType != null && mostConcreteType.IsInterface;

            if (requiresDynamicDeserialization)
            {
                settings = new JsonSerializerSettings
                {
                    TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple,
                    TypeNameHandling = TypeNameHandling.None,
                    Converters =
                    {
                        new XContainerJsonConverter()
                    }
                };
            }

            var jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(settings);
            jsonSerializer.ContractResolver = messageContractResolver;
            jsonSerializer.Binder = new JsonMessageSerializationBinder(messageMapper, messageTypes);

            var reader = CreateJsonReader(stream);
            reader.Read();

            var firstTokenType = reader.TokenType;

            if (firstTokenType == JsonToken.StartArray)
            {
                if (requiresDynamicDeserialization)
                {
                    //We can safely use the first type on the list to create an array because multi-message Publish requires messages to be of same type.
                    return (object[]) jsonSerializer.Deserialize(reader, mostConcreteType.MakeArrayType());
                }
                return jsonSerializer.Deserialize<object[]>(reader);
            }
            if (messageTypes != null && messageTypes.Any())
            {
                var rootTypes = FindRootTypes(messageTypes);
                return rootTypes.Select(x =>
                {
                    if (reader == null)
                    {
                        stream.Seek(0, SeekOrigin.Begin);
                        reader = CreateJsonReader(stream);
                        reader.Read();
                    }
                    var deserialized = jsonSerializer.Deserialize(reader, x);
                    reader = null;
                    return deserialized;
                }).ToArray();
            }
            return new[]
            {
                jsonSerializer.Deserialize<object>(reader)
            };
        }