public static void ReadObject <TItem, TRoot>(this JsonReader reader, TRoot root, TItem item, Dictionary <string, Action <JsonReader, TRoot, TItem> > setters) { if (reader.TokenType == JsonToken.Null) { return; } reader.Expect(JsonToken.StartObject); reader.Read(); while (reader.TokenType == JsonToken.PropertyName) { string propertyName = (string)reader.Value; reader.Read(); if (!setters.TryGetValue(propertyName, out var setter)) { throw new JsonReaderException($"Unknown property {typeof(TItem).Name}.{propertyName}."); } setter(reader, root, item); reader.Read(); } reader.Expect(JsonToken.EndObject); }