public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { if (map.ContainsKey(nameof(Car.Mileage))) { return(new TypeCastResult(typeof(Car))); } if (map.ContainsKey(nameof(TV.ColorSystem))) { return(new TypeCastResult(typeof(TV))); } } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { var tn = map[TYPE_MONIKER].AsString(); if (tn.IsNotNullOrWhiteSpace()) { //we do not need this to appear in Amorphous data map.Remove(TYPE_MONIKER); //try to get the cast-to the type to the value specified in the $type parameter var t = Type.GetType(typeof(JsonPolymorphicToDocTests).Namespace + '.' + nameof(JsonPolymorphicToDocTests) + '+' + tn, false, true); //if cast-to type was found and is a subtype of BaseDoc for security if (t != null && typeof(BaseDoc).IsAssignableFrom(t)) { return(new TypeCastResult(t)); } } } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { var tid = map[BIX_DISCRIMINATOR].AsGUID(Guid.Empty); if (tid == Guid.Empty) { return(TypeCastResult.NothingChanged); } map.Remove(BIX_DISCRIMINATOR); var tp = Bixer.GuidTypeResolver.TryResolve(tid); //20201016DKh if (tp == null) { if (ThrowOnUnresolvedType) { throw new BixException(StringConsts.BIX_JSON_HANDLER_UNRESOLVED_TYPE_ID_ERROR.Args(tid)); } return(TypeCastResult.NothingChanged); } return(new TypeCastResult(tp)); } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { foreach (var k in map.Keys) { if (PATTERNS.TryGetValue(k, out var type)) { return(new TypeCastResult(type)); } } } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { var result = new CustomStruct1 { Name = map["n"].AsString(), Year = map["y"].AsInt() }; return(new TypeCastResult(TypeCastOutcome.HandledCast, result, typeof(CustomStruct1))); } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { var t = map["_type"].AsString(); map.Remove("_type"); //block the field if (t == nameof(EntityA)) { return(new TypeCastResult(typeof(EntityA))); } if (t == nameof(EntityB)) { return(new TypeCastResult(typeof(EntityB))); } } return(TypeCastResult.NothingChanged); }
public override TypeCastResult TypeCastOnRead(object v, Type toType, bool fromUI, JsonReader.DocReadOptions options) { if (v is JsonDataMap map) { var tid = map[BIX_DISCRIMINATOR].AsGUID(Guid.Empty); if (tid == Guid.Empty) { return(TypeCastResult.NothingChanged); } map.Remove(BIX_DISCRIMINATOR); var tp = Bixer.GuidTypeResolver.TryResolve(tid); if (tp == null) { return(TypeCastResult.NothingChanged); } return(new TypeCastResult(tp)); } return(TypeCastResult.NothingChanged); }