private void GenerateInitCallbacksMethod()
{
Writer.WriteLine();
Writer.WriteLine("protected override void InitCallbacks() {");
Writer.Indent++;
string dummyArrayMethodName = NextMethodName("Array");
bool needDummyArrayMethod = false;
foreach (TypeScope scope in Scopes)
{
foreach (TypeMapping mapping in scope.TypeMappings)
{
if (mapping.IsSoap &&
(mapping is StructMapping || mapping is EnumMapping || mapping is ArrayMapping || mapping is NullableMapping) &&
!mapping.TypeDesc.IsRoot)
{
string methodName;
if (mapping is ArrayMapping)
{
methodName = dummyArrayMethodName;
needDummyArrayMethod = true;
}
else
methodName = (string)MethodNames[mapping];
Writer.Write("AddReadCallback(");
WriteID(mapping.TypeName);
Writer.Write(", ");
WriteID(mapping.Namespace);
Writer.Write(", ");
Writer.Write(RaCodeGen.GetStringForTypeof(mapping.TypeDesc.CSharpName, mapping.TypeDesc.UseReflection));
Writer.Write(", new ");
Writer.Write(typeof(XmlSerializationReadCallback).FullName);
Writer.Write("(this.");
Writer.Write(methodName);
Writer.WriteLine("));");
}
}
}
Writer.Indent--;
Writer.WriteLine("}");
if (needDummyArrayMethod)
{
Writer.WriteLine();
Writer.Write("object ");
Writer.Write(dummyArrayMethodName);
Writer.WriteLine("() {");
Writer.Indent++;
Writer.WriteLine("// dummy array method");
Writer.WriteLine("UnknownNode(null);");
Writer.WriteLine("return null;");
Writer.Indent--;
Writer.WriteLine("}");
}
}