public Type GetActualType(IBsonReader bsonReader, Type nominalType) { var bookmark = bsonReader.GetBookmark(); bsonReader.ReadStartDocument(); var t = nominalType; if (bsonReader.FindElement(ElementName)) { var raw = bsonReader.ReadString(); var discriminator = _discriminatorMapper.Discriminator(raw); t = _discriminatorMapper.ConcreteType(discriminator); } bsonReader.ReturnToBookmark(bookmark); return(t); }
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jObject = JObject.Load(reader); var name = _propertyNameTransformer(_discriminatorMapper.DiscriminatorName); var raw = jObject[name].ToString(); var discriminator = _discriminatorMapper.Discriminator(raw); var instance = _discriminatorMapper.GetNewInstance(discriminator); serializer.Populate(jObject.CreateReader(), instance); return(instance); }
protected void AssertReturnsDiscriminator <T>(TDiscriminator expected) { Assert.AreEqual(expected, Mapper.Discriminator(typeof(T))); }