Diccionario anidado colección en .NET

La redDictionary<TKey, TValue> El objeto permite la asignación de claves / valores como tal:

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

pero no puedo usar un Diccionario como este:

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

¿Hay alguna colección en .NET que me permita anidar?[]¿O tendría que crear el mío?

Si tengo que crear el mío, ¿cómo haría esto?

EDITAR:

También sería útil si pudiera tener implementaciones que esperen claves únicas, como las siguientes:

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

y una implementación donde una clave puede ser usada más de una vez.

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

es posible?

EDITAR (según la pregunta de Jon Skeet):

Quiero usar la estructura como tal (como un ejemplo muy aproximado):

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

resuelve a

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

e igualmente habría un equivalente para XML etc.

Respuestas a la pregunta(6)

Su respuesta a la pregunta