ProxyObject DecodeObject() { var proxy = new ProxyObject(); // Ditch opening brace. json.Read(); // { while (true) { // ReSharper disable once SwitchStatementMissingSomeCases switch (NextToken) { case Token.None: return(null); case Token.Comma: continue; case Token.CloseBrace: return(proxy); default: // Key string key = DecodeString(); if (key == null) { return(null); } // : if (NextToken != Token.Colon) { return(null); } json.Read(); // Value proxy.Add(key, DecodeValue()); break; } } }