protected virtual bool LookupConstructionRequiresArguments() { if (UnderlyingType == null) { return(false); } // not sure if it is required, but MemberDefinition return true while they are abstract and it makes no sense. if (UnderlyingType.IsAbstract) { return(true); } // FIXME: probably some primitive types are treated as special. switch (Type.GetTypeCode(UnderlyingType)) { case TypeCode.String: return(true); case TypeCode.Object: if (UnderlyingType == typeof(TimeSpan)) { return(false); } break; default: return(false); } return(UnderlyingType.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null) == null); }
private ConstructorInfo?GetConstructor() { if (UnderlyingType.IsValueType) { return(null); } ConstructorInfo?ctor = UnderlyingType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.EmptyTypes); if (ctor == null) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.IXmlSerializableMustHaveDefaultConstructor, DataContract.GetClrTypeFullName(UnderlyingType)))); } return(ctor); }