I have tried to tackle this question as follows:

>     The program Calculates the next Working day, taking into account:  
>        - weekends (Saturdays and Sundays)  
>        - holidays happening in the middle of the week 
>   
>     param name="OrderDate" the date on which the order is placed
>     param name="workingDays" the number of workingdays to process the order      
>     returns the date on which the Order is Requested to Ship

        public static DateTime getNextWorkingDay(DateTime OrderDate, int workingDays)
        {
            DateTime Holiday = new DateTime();
            List<DateTime> SelectedHolidays = new List<DateTime>();
            List<HolidayList> HolidayList = new List<HolidayList>();

            int calculatedWorkingDays=0;
            if (workingDays <= 5)
                calculatedWorkingDays = workingDays;
            else if (workingDays % 6 == 0)
            {
                calculatedWorkingDays = workingDays + workingDays / 6 * 2;
            }
            else
            {
                calculatedWorkingDays = workingDays + workingDays / 7 * 2;
            }


                     
            HolidayList =  "Read the list from Json file";
   
            foreach (var holiday in HolidayList)
            {
                string year = DateTime.Today.Year.ToString();
                Holiday = DateTime.Parse(holiday.MonthAndDayValue + "-" + year);

                if (Holiday.Day == 1 && Holiday.Month == 1)
                {
                    year = (DateTime.Today.Year + 1).ToString();
                    Holiday = DateTime.Parse(holiday.MonthAndDayValue + "-" + year);
                }


                SelectedHolidays.Add(Holiday.Date);

                if (Holiday.DayOfWeek == DayOfWeek.Sunday || Holiday.DayOfWeek == DayOfWeek.Saturday)
                {
                    //do nothing
                }
                else
                {
                    if (Holiday.Date == OrderDate.Date)
                        OrderDate.AddDays(1);
                    if (Holiday.Date > OrderDate.Date)
                    {
                        int K = (int)(Holiday.Date - OrderDate.Date).TotalDays;
                        if (K <= calculatedWorkingDays)
                        {
                            calculatedWorkingDays++;
                        }
                    }
                }
            }
            if (OrderDate.DayOfWeek == DayOfWeek.Sunday)
            {
                calculatedWorkingDays++;
            }
            else if (OrderDate.DayOfWeek == DayOfWeek.Saturday || OrderDate.DayOfWeek == DayOfWeek.Friday)
            {
                calculatedWorkingDays += 2;
            }

            // this is required date 
            DateTime date_OrderRequestedToShip = OrderDate.AddDays(calculatedWorkingDays);

            //check if the last date fall on a non working day(holiday  or weekend)
            calculatedWorkingDays = 0;
            foreach (DateTime d in SelectedHolidays)
                if (d.Date == date_OrderRequestedToShip.Date)
                    calculatedWorkingDays++;
            date_OrderRequestedToShip = date_OrderRequestedToShip.AddDays(calculatedWorkingDays);
            if (date_OrderRequestedToShip.DayOfWeek == DayOfWeek.Sunday)
            {
                calculatedWorkingDays = 1;
            }
            else if (date_OrderRequestedToShip.DayOfWeek == DayOfWeek.Saturday)
            {
                calculatedWorkingDays = 2;
            }

            return date_OrderRequestedToShip.AddDays(calculatedWorkingDays);
        }

The holiday list contains the month and day (MM/dd) part only with out the year part:
    
    {
        "holidayName": "Memorial Day",
        "MonthAndDayValue": "05-30"
    }


Can anyone help to tune up or suggest changes to make the code more efficient?