Ну если в лоб, то так: ищем элемент, у которого BeforeKey == null Он первый. Смотрим его Key. Затем ищем в оставшихся элементах элемент с BeforeKey == Key первого. ("Red" в твоем примере. ) Ну и так далее. Не понятно только, могут ли ключи повторятся. Хотя если это именно ключи, то не должны вроде.
IField
{
string Key;
string BeforeKey;
}
Key - ключ объекта, BeforeKey - имя ключа предыдущего объекта.
Надо отсортировать этот список.
Код можно не писать, главное алгоритм.