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.