Example #1
0
        private static bool ReadProperty(StreamReader rdr, JObject tmp)
        {
            string key = JsonReader.ReadString(rdr);

            if (key != null && !tmp.properties.ContainsKey(key))
            {
                JsonReader.SpinWhiteSpace(rdr);
                if (rdr.Read() == (int)':')
                {
                    JsonReader.SpinWhiteSpace(rdr);
                    JEntity value   = null;
                    bool    wasNull = false;
                    int     c       = rdr.Peek();
                    if (c == (int)'"')
                    {
                        value = JPrimitive.Read(rdr); //its a string!
                    }
                    else if (c == (int)'[')
                    {
                        value = JArray.Read(rdr);
                    }
                    else if (c == (int)'{')
                    {
                        value = JObject.Read(rdr);
                    }
                    else if (c == (int)'-' || (c >= 48 && c <= 57)) //- or ascii for 0-9 -- should be a number
                    {
                        value = JPrimitive.Read(rdr);
                    }
                    else if (c == (int)'t') //should be "true"
                    {
                        value = JPrimitive.Read(rdr);
                    }
                    else if (c == (int)'f') //should be "false"
                    {
                        value = JPrimitive.Read(rdr);
                    }
                    else if (c == (int)'n') //should be "null"
                    {
                        wasNull = true;
                        if (!JsonReader.ReadNull(rdr))
                        {
                            return(false); //looked like a null, but wasn't
                        }
                    }
                    else
                    {
                        return(false);  //unrecognized starting char
                    }
                    if (value != null || wasNull)
                    {
                        tmp.properties.Add(key, value);
                        return(true);
                    }
                    //property wasn't "null", but we didn't get anything read - that's an error
                }
            }

            return(false); //didn't get a key back
        }
Example #2
0
        private static bool ReadElement(StreamReader rdr, JArray tmp)
        {
            JsonReader.SpinWhiteSpace(rdr);
            JEntity element = null;
            int     cur     = rdr.Peek();

            if (cur == (int)'"')
            {
                element = JPrimitive.Read(rdr); //its a string!
            }
            else if (cur == (int)'{')
            {
                element = JObject.Read(rdr);
            }
            else if (cur == (int)'[')
            {
                element = JArray.Read(rdr);
            }
            else if (cur == (int)'-' || (cur >= 48 && cur <= 57)) //- or ascii for 0-9 -- should be a number
            {
                element = JPrimitive.Read(rdr);
            }
            else if (cur == (int)'t') //should be "true"
            {
                element = JPrimitive.Read(rdr);
            }
            else if (cur == (int)'f') //should be "false"
            {
                element = JPrimitive.Read(rdr);
            }
            else if (cur == (int)'n') //should be "null"
            {
                if (JsonReader.ReadNull(rdr))
                {
                    tmp.elements.Add(null);
                    return(true); //one off case here due to a literal null element
                }
                //looked like a null, but wasn't - so we fall through fail
            }

            if (element != null)
            {
                tmp.elements.Add(element);
                return(true);
            }

            return(false);
        }