I don't think this is the right way to go - I think the right answer for readability and usability is to properly type a request and a response class. But...Only thing I can think of is to make the property an object
rather than strongly typing it. You'll just need to ensure that when you assign a value to it, you assign the right type.
public class A
{
public object ArbitraryProperty { get; set; }
}
It will still serialize properly:
var a = new A { ArbitraryProperty = new B { ValueA = "a", ValueB = "b" } };
var json = JsonConvert.SerializeObject(a);
Console.WriteLine(json);
When the object comes back, deserializing will put that string into the property.
json = "{'ArbitraryProperty':'This is some string'}";
a = JsonConvert.DeserializeObject<A>(json);
This code works with simple serialize/deserialize from JSON.NET, but I don't know if WebAPI or whatever technology you're using will like it.