Programmatically get Navigation Settings in SharePoint Server 2010 and 2013

While writing some custom SharePoint Web Services (asmx) in a project, I encountered a situation where I needed to fetch the Navigation Settings of the current subsite and the site collection. After lots of head scratching and searching online, I found out the below pieces of code useful in getting the navigation properties for SharePoint Server 2010 and 2013.

You must include the Microsoft.SharePoint.Publishing namespace.

Note : The following applies only to SharePoint sites with publishing features enabled. Other properties can be found in the SPWeb.Navigation (web.Navigation) object however.

 using (SPSite site = new SPSite("http://yourweburl/"))
{
    using (SPWeb web = site.OpenWeb())
    {
        var publishingWeb = PublishingWeb.GetPublishingWeb(web);
        navSettings = new NavigationSettings // My Custom Model
        {
            Name = publishingWeb.Name,
            IncludePagesInCurrentNavigation = publishingWeb.Navigation.CurrentIncludePages,
            IncludePagesInGlobalNavigation = publishingWeb.Navigation.GlobalIncludePages,
            IncludeSubSitesInCurrentNavigation = publishingWeb.Navigation.CurrentIncludeSubSites,
            IncludeSubSitesInGlobalNavigation = publishingWeb.Navigation.GlobalIncludeSubSites,
            InheritCurrentNavigation = publishingWeb.Navigation.InheritCurrent,
            InheritGlobalNavigation = publishingWeb.Navigation.InheritGlobal,
            QuickLaunchEnabled = publishingWeb.Web.QuickLaunchEnabled,
            TreeViewEnabled = publishingWeb.Web.TreeViewEnabled
        };
   }
}

Useful, isn't it? You can try setting them as well using the Update() methods after assigning desired value to each of the properties to save changes to the navigation properties.