Jose3d
Jose3d

Reputation: 9277

Dynamically generate anonymous type

I have an application that deserializes this 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>

I'm interested to use this deserialized information to map each route:

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

To set the defaults of a route it's needed to use anonymous types, so how can I use these anonymous types, taking the keys and values from my deserialized class at runtime?

Thanks

Regards

Jose

Upvotes: 1

Views: 214

Answers (1)

Dima
Dima

Reputation: 6741

routes.MapRoute() builds RouteValueDictionary from defaults. So you may deserialize/build Dictionary<string,object> from your xml and pass it to routes.MapRoute(). Same with constraints paramenter.

Update: defaults built as dictionary

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

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

Upvotes: 1

Related Questions