public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type baseType, bool baseTypeCanBeIndirect)
{
ElementAccessor element = ImportElement(name, typeof(TypeMapping), baseType);
if (element.Mapping is StructMapping)
{
MakeDerived((StructMapping)element.Mapping, baseType, baseTypeCanBeIndirect);
}
else if (baseType != null)
{
if (element.Mapping is ArrayMapping)
{
// in the case of the ArrayMapping we can use the top-level StructMapping, because it does not have base base type
element.Mapping = ((ArrayMapping)element.Mapping).TopLevelMapping;
MakeDerived((StructMapping)element.Mapping, baseType, baseTypeCanBeIndirect);
}
else
{
// Element '{0}' from namespace '{1}' is not a complex type and cannot be used as a {2}.
throw new InvalidOperationException(SR.Format(SR.XmlBadBaseElement, name.Name, name.Namespace, baseType.FullName));
}
}
return new XmlTypeMapping(Scope, element);
}