Eyeing their first-ever series win in South Africa, India could have got more but a rain interruption punctured their momentum after Dhawan's hundred.
This was after India won the toss and opted to bat on a true batting surface. The visitors made one change, bringing in Shreyas Iyer for Kedar Jadhav, who had suffered a hamstring injury during the third ODI at Cape Town.
South Africa made two changes, bringing in Morne Morkel for Imran Tahir. AB de Villiers, who averages 112.50 in five Pink ODIs, replaced Khaya Zondo in the Proteas' XI. The Wanderers was expectedly bathed in pink for a good cause of creating awareness and raising funds for breast cancer.
A change in scenery though didn't reverse Rohit Sharma's floundering fortunes on this tour. He was out cheaply again, this time for 5 runs off 13 balls, as Kagiso Rabada (2-58) took a brilliant reflex return catch diving forward.
TV umpire ruled against Rohit who walked back as his ODI average fell to 11.45 in 12 matches on South African soil.
Dhawan and Kohli then came together, replicating their success from previous matches in the series. Together they attacked the South African attack, finding the pitch much to their liking.
The duo added 100 runs off as many balls as South Africa looked lost for ideas with Aiden Markram's leadership inexperience showing in his odd field settings.
Kohli looked unstoppable and the highlight of his innings was a straight six off Lungi Ngidi (2-52) as the batsman just walked down and launched him over the sightscreen.
In doing so, Kohli became the second batsman after de Villiers to score 350-plus runs in an ODI bilateral series on South African soil. De Villiers had scored 367 runs against Pakistan in 2013.
Against the run of play, the Proteas etched out a wicket as Kohli hit straight to cover off Morris in the 32nd over.
Overall, Kohli faced 83 balls inclusive of 7 fours and a six. Afterwards, Dhawan reached his hundred off 103 balls, celebrating his day in style.
Thunder and lightning forced players off the field, and there was a brief rain shower as well. 53 minutes were lost due to the same, but no overs were lost.
That break served South Africa well though as India lost two wickets in the space of 14 balls after resumption. First, Dhawan was caught at mid-off off Morne Morkel (1-55) and six balls later, Ajinkya Rahane (8) holed out to deep square leg.
Shreyas Iyer (18) was sent out at no.5 and together with MS Dhoni (42* off 43 balls), he calmed the situation for India, before Iyer was caught at long on off Ngidi in a bid to get the scoring rate up.
Dhoni and Hardik Pandya (9) looked for big shots, but missed more than they hit, adding only 15 off 22 balls.
Markram dismissed Pandya with a one-handed stunning catch at cover as India slipped further in their pursuit of 300.
India scored only 89 runs but lost five wickets after the rain break.
(This story has not been edited by Business Standard staff and is auto-generated from a syndicated feed.)