This is telling:
"I then have a switch statement that attempts to assign
the data to the value field."
Not very OO is it. Polymorphism possible? Guess not. If you ever have a switch statement (or ladder-like if else construct) discriminating on type, then you have a broken OO system or class library.
No polymorphism, no OO.