示例#1
0
 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);
 }
示例#2
0
            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);
            }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 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);
 }
示例#6
0
 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);
 }
示例#7
0
        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);
        }