Currently, in DefaultTranscoder
, the incoming and outgoing serialzation contracts are passed in from ClientConfiguration
, but I can’t see where other serialization options can be set, such as TypeNameHandling
. Without access to those settings, it is currently not possible to deserialize a collection of sub-typed objects, such as
public class Garage
{
public List<Car> Cars { get; set; }
}
public class Ford : Car
{
public string FordSpecificThing { get; set; }
}
public class Honda : Car
{
public string HondaSpecificThing { get; set; }
}
var garage = new Garage();
garage.Cars.Add(new Ford { FordSpecificThing = "TestFord" });
garage.Cars.Add(new Honda { HondaSpecificThing = "TestHonda" });
That gives you something like this document:
{ Cars: [
{ FordSpecificThing: "TestFord" },
{ HondaSpecificThing: "TestHonda"}
]
}
However, because you cannot set TypeNameHandling
in the deserializer, this object does not properly deserialize, because the subtypes cannot be determined without TypeNameHandling.Objects
(with the corresponding $type
elements in the JSON) or the like. This option can be set via the IContractResolver
, but it does not take effect with top level objects, like these are (I’ve tried).
My question is, is there another way to use a different ITypeTranscoder
that I can build to account for this, or are there other ways to deserialize besides the normal Get
and GetDocument
calls? It looks like ITypeTranscoder
was built to be injected, but I can’t see where it could be, since DefaultTranscoder
is instantiated directly.
I have altered this in my personal fork to take JsonSerializerSettings
instead of IContractResolver
. I could put out a Pull Request if you want to see it, though.
-Matt