The Tykes slipped to 15th in the table, despite taking the lead through Lewin Nyatanga’s first-half header.
Jordan Cook scored twice as the Saddlers took control, his goals sandwiching a 34th-minute effort from Tom Bradshaw.
The result stretched mid-table Walsall’s unbeaten run to six league games, taking them up to 12th, while Barnsley have now not won in five.
A frustrated Wilson criticised his team for lacking the quality in the final third of the pitch, while wasting the chances that did come their way.
“We had great situations that we created for ourselves or found ourselves in and we just fritted them away,” said Wilson.
“The final ball, particularly in the first half, was poor. We had the lion’s share of possession in the second half and we didn’t make it count.
“A little bit of hesitancy in the final third has been costing us.
“The young lads that came in did well. The biggest disappointment we’ve had is losing players at this stage.
“It’s not the ideal set-up. You want the players at your disposal otherwise you’re expecting young players to come in and perform.
“The second goal was down to ourselves – a mix-up. The third goal makes it seem there was quite a distance between the two teams and it was far from that.
“We feel we did better than the scoreline suggested.”
Walsall: O’Donnell, Purkiss, Downing, James Chambers, Henry, Baxendale (Forde 68), Cain, Adam Chambers, Cook,Sawyers, Bradshaw (Manset 87). Unused substitutes: O’Connor, MacGillivray, Benning, Flanagan, Grimes.
Barnsley: Turnbull, Holgate, Berry, Nyatanga (Cowgill 79), Brown, Cranie, Abbott (Hemmings 77), Hourihane, Jennings, Trotta (Lita 62), Cole. Unused substitutes: Treacy, Davies, Digby, Boakye-Yiadom.
Referee: T Kettle (Rutland).
Man-of-the-match: Lewin Nyatanga.