void ExecuteExporter(object x, System.Type type) { ExportDelegate v; if (!Exporters.TryGetValue(type, out v)) { if (type.IsArray) { v = ExportArray; } else if (type.GetInterface("System.Collections.IList") != null) { v = ExportIList; } else if (type.GetInterface("System.Collections.IDictionary") != null) { v = ExportIDictionary; } else if (!type.IsPrimitive) // handle user defined types { v = CreateUserTypeExporter(x, type); } else { throw new UnsupportedPrimitiveTypeException(type); } Exporters[type] = v; } v(this, x); }
private ReadDelegate GetReader(System.Type type) { ReadDelegate d; if (!Readers.TryGetValue(type, out d)) { System.Type ilist; System.Type idictionary; if (type.IsArray) { var reader = new ArrayReader(type); d = reader.Read; } else if ((ilist = type.GetInterface("System.Collections.Generic.IList`1")) != null) { var reader = new ListReader(type, ilist.GetGenericArguments()); d = reader.Read; } else if ((idictionary = type.GetInterface("System.Collections.Generic.IDictionary`2")) != null) { var reader = new DictionaryReader(type, idictionary.GetGenericArguments()); d = reader.Read; } else if (!type.IsPrimitive) // handle user defined types { d = CreateUserDefinedReader(ref type); } else { throw new UnsupportedPrimitiveTypeException(type); } Readers[type] = d; } return d; }