public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var keyList = new KeyList(); if (reader.TokenType == JsonToken.StartArray) { JArray array = JArray.Load(reader); var keyCodes = array.ToObject<int[]>(); for (int i = 0; i < keyCodes.Length; i++) { // TODO: Add error handling for invalid values? Or just ignore invalids with a warning in the log var key = (System.Windows.Input.Key)keyCodes[i]; keyList.Add(key); } } return keyList; }