예제 #1
0
            private static void parseJson(fastCSharp.emit.jsonParser parser, ref deSerializePool value)
            {
                fastCSharp.emit.jsonParser.config config = typePool <fastCSharp.emit.jsonParser.config> .Pop() ?? new fastCSharp.emit.jsonParser.config(), oldConfig = parser.Config;

                fastCSharp.emit.memberCopyer <fastCSharp.emit.jsonParser.config> .Copy(config, oldConfig);

                if (value.MemberMap == null)
                {
                    value.MemberMap = fastCSharp.code.memberMap <memberMapType> .New();
                }
                (parser.Config = config).MemberMap = value.MemberMap;
                try
                {
                    if (value.Value == null)
                    {
                        valueType poolValue = value.Value = typePool <valueType> .Pop();

                        try
                        {
                            fastCSharp.emit.jsonParser.typeParser <valueType> .Parse(parser, ref value.Value);
                        }
                        finally
                        {
                            if (poolValue != value.Value)
                            {
                                typePool <valueType> .PushOnly(poolValue);
                            }
                        }
                    }
                    else
                    {
                        memberMapType parseValue = value.Value;
                        fastCSharp.emit.jsonParser.typeParser <memberMapType> .Parse(parser, ref parseValue);
                    }
                }
                finally
                {
                    parser.Config = oldConfig;
                    config.Null();
                    typePool <fastCSharp.emit.jsonParser.config> .PushNotNull(config);
                }
            }
예제 #2
0
            private static void deSerialize(fastCSharp.emit.dataDeSerializer deSerializer, ref deSerializePool value)
            {
                if (deSerializer.CheckNull() == 0)
                {
                    value.Value = default(valueType);
                }
                else
                {
                    memberMap oldMemberMap = deSerializer.MemberMap;
                    deSerializer.MemberMap = value.MemberMap;
                    try
                    {
                        if (value.Value == null)
                        {
                            valueType poolValue = value.Value = typePool <valueType> .Pop();

                            try
                            {
                                fastCSharp.emit.dataDeSerializer.typeDeSerializer <valueType> .DeSerialize(deSerializer, ref value.Value);
                            }
                            finally
                            {
                                if (poolValue != value.Value)
                                {
                                    typePool <valueType> .PushOnly(poolValue);
                                }
                            }
                        }
                        else
                        {
                            memberMapType parseValue = value.Value;
                            fastCSharp.emit.dataDeSerializer.typeDeSerializer <memberMapType> .DeSerialize(deSerializer, ref parseValue);
                        }
                    }
                    finally
                    {
                        value.MemberMap        = (memberMap <memberMapType>)deSerializer.MemberMap;
                        deSerializer.MemberMap = oldMemberMap;
                    }
                }
            }