public object[] Deserialize(Stream stream, IList<Type> messageTypesToDeserialize = null)
{
if (stream == null)
{
return null;
}
var result = new List<object>();
var doc = ReadStreamIntoDocument(stream, sanitizeInput);
if (NothingToBeProcessed(doc))
{
return result.ToArray();
}
CacheDefaultNameSpaceMessageBaseTypesAndPrefixes(doc);
if (ContainsMultipleMessages(doc))
{
if (ContainsAnyMessageTypesToDeserialize(messageTypesToDeserialize))
{
var rootTypes = FindRootTypes(messageTypesToDeserialize);
ProcessRootTypes(rootTypes, doc, result);
}
else
{
var m = Process(doc.DocumentElement, null);
if (m == null)
{
throw new SerializationException("Could not deserialize message.");
}
result.Add(m);
}
}
else
{
ProcessChildNodes(messageTypesToDeserialize, doc, result);
}
return result.ToArray();
}