void DeserializeObject(JsonTokenizer tokenizer, object instance, JsonTypeCacheEntry cache)
        {
            bool isNameExpected = false;

            while (true)
            {
                if (isNameExpected)
                {
                    tokenizer.ReadString();
                }
                else
                {
                    tokenizer.ReadNext();
                    if (tokenizer.SpecialChar == '}')
                    {
                        return;
                    }

                    if (!tokenizer.TokenIsString)
                    {
                        throw new JsonException("String expected");
                    }

                    isNameExpected = true;
                }

                string n = tokenizer.Token;

                tokenizer.ReadColon();

                JsonTypeMemberEntry me;
                if (cache.Members != null && cache.Members.TryGetValue(n, out me) && me.WriteValue != null)
                {
                    tokenizer.ReadNext();

                    object v;
                    if (TryDeserializeValue(tokenizer, me.MemberType, out v))
                    {
                        me.WriteValue(instance, v);
                    }
                }
                else
                {
                    tokenizer.SkipValue();
                }

                tokenizer.ReadNext();

                switch (tokenizer.SpecialChar)
                {
                case ',': break;

                case '}': return;

                default: throw new JsonException("Unexpected token");
                }
            }
        }
Ejemplo n.º 2
0
        void SerializeObject(JsonWriter writer, object instance, Type type, JsonTypeCacheEntry cache)
        {
            if (instance == null)
            {
                SerializeNull(writer, type);
            }
            else
            {
                writer.BeginObject();

                foreach (var k in cache.Members)
                {
                    SerializeProperty(writer, instance, k.Key, k.Value);
                }

                writer.EndObject();
            }
        }