Handling JSON deserialization for many derived types - C#