2012-12-21 107 views
1

我有這個反序列化XML的應用程序:動態生成匿名類型

<SpecialRoutesList> 
    <SpecialRoutes> 
     <SpecialRoute> 
      <Name>TestRoute1</Name> 
      <Pattern>TestRouteUrl1</Pattern> 
      <Defaults> 
       <Controller>Home</Controller> 
       <Action>TestRoute1</Action> 
       <Params> 
        <Key>id</Key> 
        <Value>1</Value> 
       </Params> 
      </Defaults> 
     </SpecialRoute> 
     <SpecialRoute> 
      <Name>TestRoute2</Name> 
      <Pattern>TestRouteUrl2</Pattern> 
      <Defaults> 
       <Controller>Home</Controller> 
       <Action>TestRoute2</Action> 
       <Params> 
        <Key>id</Key> 
        <Value>1</Value> 
       </Params> 
      </Defaults> 
     </SpecialRoute> 
    </SpecialRoutes> 
</SpecialRoutesList> 

我很想利用這個反序列化的信息來映射每個路線:

foreach(SpecialRoute route in SpecialRoutesList.SpecialRoutes) { 
    routes.MapRoute(route.Name, route.Pattern, new { ?????????? }, ????????); 
} 

要設置的默認值路由它需要使用匿名類型,那麼如何使用這些匿名類型,在運行時從反序列化的類中獲取鍵和值?

感謝

問候

何塞

+0

「匿名類型」的概念違約真的只有在編譯時。在編譯時你的代碼根本不知道「類型」,但會生成一個非匿名類型,因此在運行時會有一個具體的類型在使用。有解析器將解析XML並生成動態類型。例如:http://baijumax.blogspot.ca/2012/02/deserializing-xml-to-dynamic-object-in.html –

回答

1

routes.MapRoute()建立從默認RouteValueDictionary。所以你可以從你的xml反序列化/構建Dictionary<string,object>並將它傳遞給routes.MapRoute()。與約束參數相同。

更新:建成字典

var defaults = new Dictionary<string, object> {{"controller", "Account"}, {"action", "Login"}}; 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}", // URL with parameters 
    defaults 
); 
+0

嗨迪瑪, 首先感謝您的答覆。我嘗試使用route.Defaults.ToDictionary(d => d.Key,d => d.Value)爲了有一個字典<字符串,對象>,但看起來像不同於新的RouteValueDictionary(新{控制器= 「X」,Action =「Y」}) – Jose3d

+0

我已經仔細檢查了這一點,它的工作原理。我把我的代碼放在updade中。你的代碼不起作用的原因可能是URL模式參數和默認值不匹配。 – Dima