Kolekcja zagnieżdżonego słownika w .NET

SiećDictionary<TKey, TValue> obiekt umożliwia przypisanie klucza / wartości w ten sposób:

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

ale nie mogę używać słownika w ten sposób:

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

Czy istnieje kolekcja w .NET, która pozwala mi zagnieżdżać się[], czy musiałbym stworzyć własny?

Jeśli muszę stworzyć własny, jak bym to zrobił?

EDYTOWAĆ:

Byłoby również użyteczne, gdybym mógł mieć implementacje, które oczekują unikalnych kluczy, takich jak:

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

oraz implementacja, w której klucz może być używany więcej niż jeden raz

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

czy to możliwe?

EDIT (zgodnie z pytaniem Jona Skeeta):

Chcę użyć takiej struktury (jako bardzo szorstki przykład):

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

postanawia

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

i równie dobrze byłby odpowiednik XML itp.

questionAnswers(6)

yourAnswerToTheQuestion