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 }
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); }