The 27-year-old Delhi left-hander blasted a 150-ball-248, which is only the second highest individual List 'A' score behind former Surrey batsman Alistair Brown's 268 against Glamorgan at the Oval, back on July 19, 2002.
Riding on Dhawan's brilliance and some solid support from skipper Cheteshwar Pujara (109 not out), India 'A' amassed a mammoth 433 for three in 50 overs.
The target was a tall-order for the home team but their batsmen fought hard before being bowled out for 394 in 48.4 overs.
Reeza Hendricks (102, 78 balls, 12x4, 2x6) and Vaughn van Jaarsveld's (108, 91 balls, 7x4, 5x6) centuries were not good enough to take the hosts past the finishing line.
India 'A' will now meet Australia 'A' in the final on Wednesday.
The day undoubtedly belonged to Dhawan, who hit 30 boundaries and seven sixes in his innings during which he surpassed Sachin Tendulkar's 200 not out against South Africa in 2010 at Gwalior and Virender Sehwag's 219 against West Indies in Indore back in 2011.
If Dhawan's first 100 came off only 86 balls, the second hundred came off only 46 balls as he raced to his maiden List 'A' double hundred in only 132 balls with a push off left-arm seamer Beuran Hendricks' bowling at the LC de Villiers Oval.
Just when it looked that he would eclipse the world record, he was caught by wicketkeeper Dane Vilas of Rusty Theron's bowling trying another slog shot.
Such was his domination that out of his 162 out of his 248 runs came in only 37 scoring strokes. Dhawan added 285 runs in only 33.5 overs with his skipper Pujara, who also helped himself to a three-figure mark having faced 97 balls and hit eight boundaries.
Dhawan started smashing bowlers from the word 'go' as the first ball of the match bowled by seamer Hardus Viljoen was driven towards long-on for a boundary.
In Viljoen's second and the third over of the innings, Dhawan hit the bowler for three consecutive boundaries, something he repeated when left-arm spinner Roelof van der Merwe also came into bowl.
The moment a bowler pitched short, Dhawan rocked back to pull the deliveries in the region between deep mid-wicket and deep square leg.
If he got fuller deliveries, he launched into it to ferociously drive it in the arc between cover and mid-off. If there was width outside the off-stump, then the square cut came into play.
He reached his 100 off 86 balls with a four of Van der Merwe's bowling. As if to celebrate his milestone, he lofted pacer Theron over cover for successive sixes.
Not content to wreak havoc with the bat against South Africa A, he also captured the wicket of Justing Ontong, who was out one run short of his half-century.
Cheteshwar Pujara was another batsman to torment the South Africans, coming in at No. 3 to hit an unbeaten 109 off 97 balls, including eight fours.
Opener Murali Vijay, contributed 40 off 37 balls as India made the most of winning the toss with his 51-minute stand including seven fours.
Theron (1/98 in 10 overs) and Viljoen (1/94 in 8 overs) were taken to the cleaners as they gave away 192 runs in 18 overs courtesy Dhawan.
The pitches at the LC De Villiers stadium has been as flat as the one available at Rajkot as a whopping 827 runs were scored in total from 98.4 overs.
The Indian bowlers did have a torrid time as Hendricks and Rile Russouw (43) clobbered the visitors for 121 runs in only 12.1 overs.
Young fast bowler Ishwar Chand Pandey (4/76) did get vital breakthroughs in the slog overs but not before getting a pasting from the Proteas batsmen.
Even more scarier than the opening stand was the 89-run sixth-wicket stand between Van Jaarsveld and Van der Merwe (36) before Pandey removed the duo in a space of three deliveries to finally ensure an Indian win.
India 'A': 433/3 in 50 overs (Shikhar Dhawan 248, Cheteshwar Pujara 109 no, Murali Vijay 40, Hardus Viljoen 1/94, Rusty Theron 1/98).
South Africa 'A': 394 in 48.4 overs (Reeza Hendricks 102, Vaughan van Jaarsveld 108, Ishwar Chand Pandey 4/76, Jaydev Unadkat 2/79). India won by 39 runs. Final: India A vs Australia A (August 14).