Originally from Dunedin, Florida, Wilson attended Seminole High School. At Seminole High, Wilson was part of a team that won the state and national championship and finished an undefeated 31-0. Wilson then attended St. Petersburg College in St. Petersburg, Florida.
Wilson began the season for the Salt Lake Bees, the Angels' Triple-A affiliate. He began the season hitting.339 in 16 games with no home runs and 12 RBI. On April 28,, Wilson was recalled by the major league club and made his major league debut on that same day against the Oakland Athletics. He came in as a defensive replacement for Mike Napoli and in his first at-bat, hit a single off Dallas Braden. On April 23, 2010, while playing catcher for the Angels against the New York Yankees, Wilson was involved in a head-on collision with Mark Teixeira, who was attempting to slide into home. Wilson was knocked away, injuring his head and ankle. Mike Napoli then came in and caught the remainder of the game. On July 27, 2011, Wilson caught Ervin Santana's no-hitter against the Cleveland Indians, nearly two years after catching Sean O'Sullivan's no-hitter with Triple-A Salt Lake Bees on July 28, 2009.
On October 22, 2012, Wilson was claimed off waivers by the Toronto Blue Jays. Pitcher Chad Beck was designated for assignment to make room on the 40-man roster for Wilson. On November 30, the Blue Jays announced that they were not offering Wilson a contract for 2013, and he became a free agent.
New York Yankees
On December 13, 2012, the Yankees signed Wilson to a minor league contract with an invitation to spring training.
Arizona Diamondbacks
Wilson signed a minor league contract with an invite to Spring Training with the Arizona Diamondbacks in October 2013. He declined a minor league assignment on October 12, becoming a free agent.
On December 12, 2014, he signed a minor league deal with the Tampa Bay Rays. On April 5, 2015, the Rays selected his contract from their Triple-A affiliate, the Durham Bulls. On June 14, the Rays sent him outright to Triple-A. He was called back up on July 29.
Texas Rangers
On July 31, 2015, Wilson was claimed off waivers by the Texas Rangers. In his debut with the Rangers, Wilson went 2-4 with 2 RBI against the San Francisco Giants.
On May 3, 2016, the Tigers traded Wilson back to Texas in exchange for pitcher Chad Bell. Wilson was effective in his return, hitting.250 with two grand slams. Wilson was designated for assignment after the Texas Rangers acquired all star catcher Jonathan Lucroy from the Milwaukee Brewers.
Return to Tampa
On August 4, 2016, the Tampa Bay Rays claimed Wilson off waivers from the Texas Rangers and added him to the 40-man roster. He was activated on the 25-man roster on August 5. Wilson finished his 2016 with a.230 batting average. On November 14, Wilson elected free agency after clearing outright waivers.
Wilson signed with the Los Angeles Dodgers as a minor league free agent in advance of the 2017 season. He was assigned to the Triple-A Oklahoma City Dodgers to begin the season. In 75 games, he hit.243 with 11 homers and 45 RBI.
Minnesota Twins
On November 30, 2017, Wilson signed a minor league contract with the Minnesota Twins. Wilson became the backup catcher to Mitch Garver after Jason Castro was ruled out for the rest of the 2018 season after suffering a torn meniscus injury.
On August 30, 2018, Wilson was traded to the Chicago Cubs in exchange for Chris Gimenez and cash.
Detroit Tigers (second stint)
On December 4, 2018, Wilson signed a minor league deal with the Detroit Tigers. He was released on March 22, 2019. He re-signed a minor league deal with the Tigers on March 24. The Tigers selected his contract on June 14, and he was promoted to the major league club. On July 28, the Tigers placed Wilson on outright waivers. He hit.091 in 15 games. In 2019, he had the slowest sprint speed of all American League catchers, at 23.2 feet/second. He elected free agency on October 1.
Coaching career
On December 9, 2019, Wilson was hired by the Texas Rangers organization to serve as the manager of the Frisco RoughRiders.