private IDictionary CreateNewDictionary(BitStreamReader reader, DictionaryContract contract, out bool createdFromNonDefaultCreator) { if (contract.OverrideCreator != null) { if (contract.HasParameterizedCreator) { createdFromNonDefaultCreator = true; return(contract.CreateTemporaryDictionary()); } else { createdFromNonDefaultCreator = false; return((IDictionary)contract.OverrideCreator()); } } else if (contract.IsReadOnlyOrFixedSize) { createdFromNonDefaultCreator = true; return(contract.CreateTemporaryDictionary()); } else if (contract.DefaultCreator != null && !contract.DefaultCreatorNonPublic) { object dictionary = contract.DefaultCreator(); if (contract.ShouldCreateWrapper) { dictionary = contract.CreateWrapper(dictionary); } createdFromNonDefaultCreator = false; return((IDictionary)dictionary); } else if (contract.HasParameterizedCreatorInternal) { createdFromNonDefaultCreator = true; return(contract.CreateTemporaryDictionary()); } else { if (!contract.IsInstantiable) { throw new SerializationException("Could not create an instance of type {0}. Type is an interface or abstract class and cannot be instantiated.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType)); } throw new SerializationException("Unable to find a default constructor to use for type {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType)); } }