private static void WriteNonPrimitive(WriterState writer, object val) { switch (val) { case IDictionary <string, object> dictAsObj: // treat IDictionary<string, object> as Object type WriteDictionaryAsObject(writer, dictAsObj); break; case IDictionary _ when GenericWriter.WriteDictionary(writer, val): break; case IDictionary dictionary: WriteDictionary(writer, dictionary); break; case ICollection _ when GenericWriter.WriteDictionary(writer, val): break; case ICollection list: WriteList(writer, list); break; case IReadOnlyDictionary <string, object> roDictAsObj: // treat IReadOnlyDictionary<string, object> as Object type WriteReadOnlyDictionaryAsObject(writer, roDictAsObj); break; case IEnumerable _ when GenericWriter.WriteReadOnlyDictionary(writer, val): break; case IEnumerable enumerable: WriteEnumerable(writer, enumerable); break; default: WriteObject(writer, val); break; } }
public void Write(WriterState writer, T val) => GenericWriter.WriteReadOnlyDictionary(writer, val);