System.Xml.Serialization.SerializationCodeGenerator.GenerateGetXmlEnumValue C# (CSharp) Method

GenerateGetXmlEnumValue() private method

private GenerateGetXmlEnumValue ( XmlTypeMapping map ) : void
map XmlTypeMapping
return void
		void GenerateGetXmlEnumValue (XmlTypeMapping map)
		{
			EnumMap emap = (EnumMap) map.ObjectMap;

			string xmlNamesArray = null;
			string valuesArray = null;

			if (emap.IsFlags) {
				// create static string[] holding XML names of enum constants
				xmlNamesArray = GetUniqueName ("gxe", map, "_xmlNames" + map.XmlType);
				Write ("static readonly string[] " + xmlNamesArray + " = { ");
				for (int i = 0; i < emap.XmlNames.Length; i++) {
					if (i > 0)
						_writer.Write (',');
					_writer.Write ('"');
					_writer.Write (emap.XmlNames[i]);
					_writer.Write ('\"');
				}
				_writer.WriteLine (" };");

				// create const long[] holding values of enum constants
				valuesArray = GetUniqueName ("gve", map, "_values" + map.XmlType);
				Write ("static readonly long[] " + valuesArray + " = { ");
				for (int i = 0; i < emap.Values.Length; i++) {
					if (i > 0)
						_writer.Write (',');
					_writer.Write (emap.Values[i].ToString (CultureInfo.InvariantCulture));
					_writer.Write ("L");
				}
				_writer.WriteLine (" };");
				WriteLine (string.Empty);
			}

			WriteLine ("string " + GetGetEnumValueName (map) + " (" + map.TypeData.CSharpFullName + " val)");
			WriteLineInd ("{");


			WriteLineInd ("switch (val) {");
			for (int i = 0; i < emap.EnumNames.Length; i++)
				WriteLine ("case " + map.TypeData.CSharpFullName + ".@" + emap.EnumNames[i] + ": return " + GetLiteral (emap.XmlNames[i]) + ";");

			if (emap.IsFlags) {
				WriteLineInd ("default:");
				// FromEnum actually covers this case too, but we save some cycles here
				WriteLine ("if (val.ToString () == \"0\") return string.Empty;");
				Write ("return FromEnum ((long) val, " + xmlNamesArray + ", " + valuesArray);
#if NET_2_0
				_writer.Write (", typeof (");
				_writer.Write (map.TypeData.CSharpFullName);
				_writer.Write (").FullName");
#endif
				_writer.Write (')'); // close FromEnum method call
				WriteUni (";"); // end statement
			} else {
#if NET_2_0
				WriteLine ("default: throw CreateInvalidEnumValueException ((long) val, typeof (" + map.TypeData.CSharpFullName + ").FullName);");
#else
				WriteLine ("default: return ((long)val).ToString(CultureInfo.InvariantCulture);");
#endif
			}
			
			WriteLineUni ("}");
			
			WriteLineUni ("}");
			WriteLine ("");
		}
		
SerializationCodeGenerator