Вложенный словарь в .NET

СетьDictionary<TKey, TValue> объект позволяет присваивать ключ / значения следующим образом:

Dictionary<string, string> dict = new Dictionary<string, string>();
dict["1"] = "foo";
dict["2"] = "bar";

но я не могу использовать словарь так:

Dictionary<string, string> dict = new Dictionary<string, string>();
dict["F1"]["F2"]["F3"] = "foo";
dict["2"]["X"] = "bar";

Есть ли в .NET коллекция, которая позволяет мне вкладывать[], или я должен был бы создать мой собственный?

Если я должен создать свой собственный, как бы я это сделал?

EDIT:

Было бы также полезно, если бы у меня могли быть реализации, которые ожидают уникальные ключи, например:

dict["F1"]["F2"]["F3"] = "foo";
dict["F1"]["F2"]["F3"] = "bar"; //result is "bar" because "foo" was overridden

и реализация, в которой ключ может использоваться более одного раза

dict["F1"]["F2"]["F3"] = "foo";
dict["F1"]["F2"]["F3"] = "bar"; //result can be "foo" and "bar"

Это возможно?

EDIT (as per Jon Skeet's question):

Я хочу использовать такую структуру (очень грубый пример):

json["data"]["request"]["name"] = "username";
json["data"]["request"]["pass"] = "password";

решает в

{ data: { request: { name: "username", pass: "password" } } }

и в равной степени был бы эквивалент для XML и т. д.

Ответы на вопрос(6)

Ваш ответ на вопрос