@pavarotti: wybacz, że wprowadziłem Cię w błąd, cały czas myślałem, że chodzi nam o operację w drugą stronę, tj. deserializację, mimo że jak byk jest w temacie, że chodzi o serializację... W tym wypadku to robota jest wręcz trywialna i oprócz interfejsów nic nam nie potrzeba, przykładowy kod:
public interface IB
{
}
public class A
{
public IB Value { get; set; }
}
public class B1 : IB
{
public string Value { get; set; }
}
public class B2 : IB
{
public List<string> Value { get; set; }
}
var x = new List<A>
{
new A
{
Value = new B1
{
Value = "Hello"
}
},
new A
{
Value = new B2
{
Value = new List<string> { "Goodbye", "World" }
}
}
};
var result = JsonConvert.SerializeObject(x);
Wynik:
[
{
"Value": {
"Value": "Hello"
}
},
{
"Value": {
"Value": [
"Goodbye",
"World"
]
}
}
]
Natomiast w drugą stronę to już nie zadziała i przy var obj = JsonConvert.DeserializeObject<A>(result);
rzuci wyjątkiem.