private void WriteEnumAndArrayTypes()
{
foreach (TypeScope scope in Scopes)
{
foreach (Mapping m in scope.TypeMappings)
{
if (m is EnumMapping && !m.IsSoap)
{
EnumMapping mapping = (EnumMapping)m;
string fullTypeName = mapping.TypeDesc.CSharpName;
Writer.Write("else if (");
WriteTypeCompare("t", fullTypeName, mapping.TypeDesc.UseReflection);
Writer.WriteLine(") {");
Writer.Indent++;
string methodName = ReferenceMapping(mapping);
#if DEBUG
// use exception in the place of Debug.Assert to avoid throwing asserts from a server process such as aspnet_ewp.exe
if (methodName == null) throw new InvalidOperationException(SR.Format(SR.XmlInternalErrorMethod, mapping.TypeDesc.Name) + Environment.StackTrace);
#endif
Writer.WriteLine("Writer.WriteStartElement(n, ns);");
Writer.Write("WriteXsiType(");
WriteQuotedCSharpString(mapping.TypeName);
Writer.Write(", ");
WriteQuotedCSharpString(mapping.Namespace);
Writer.WriteLine(");");
Writer.Write("Writer.WriteString(");
Writer.Write(methodName);
Writer.Write("(");
if (!mapping.TypeDesc.UseReflection) Writer.Write("(" + fullTypeName + ")");
Writer.WriteLine("o));");
Writer.WriteLine("Writer.WriteEndElement();");
Writer.WriteLine("return;");
Writer.Indent--;
Writer.WriteLine("}");
}
else if (m is ArrayMapping && !m.IsSoap)
{
ArrayMapping mapping = m as ArrayMapping;
if (mapping == null || m.IsSoap) continue;
string fullTypeName = mapping.TypeDesc.CSharpName;
Writer.Write("else if (");
if (mapping.TypeDesc.IsArray)
WriteArrayTypeCompare("t", fullTypeName, mapping.TypeDesc.ArrayElementTypeDesc.CSharpName, mapping.TypeDesc.UseReflection);
else
WriteTypeCompare("t", fullTypeName, mapping.TypeDesc.UseReflection);
Writer.WriteLine(") {");
Writer.Indent++;
Writer.WriteLine("Writer.WriteStartElement(n, ns);");
Writer.Write("WriteXsiType(");
WriteQuotedCSharpString(mapping.TypeName);
Writer.Write(", ");
WriteQuotedCSharpString(mapping.Namespace);
Writer.WriteLine(");");
WriteMember("o", null, mapping.ElementsSortedByDerivation, null, null, mapping.TypeDesc, true);
Writer.WriteLine("Writer.WriteEndElement();");
Writer.WriteLine("return;");
Writer.Indent--;
Writer.WriteLine("}");
}
}
}
}