private bool TryParseFeature(RavenJObject obj, out object result)
        {
            string typeString;

            if (TryParseTypeString(obj, out typeString) && typeString.ToLowerInvariant() == "feature")
            {
                RavenJToken geometry;
                object      geo;
                if (obj.TryGetValue("geometry", out geometry) && TryParseGeometry((RavenJObject)geometry, out geo))
                {
                    RavenJToken prop;
                    Dictionary <string, object> pr = null;
                    if (obj.TryGetValue("properties", out prop) && prop is RavenJObject)
                    {
                        var props = (RavenJObject)prop;
                        if (props.Count > 0)
                        {
                            pr = Enumerable.ToDictionary(props, x => x.Key, x => SantizeRavenJObjects(x.Value));
                        }
                    }

                    object      id = null;
                    RavenJToken idToken;
                    if (obj.TryGetValue("id", out idToken))
                    {
                        id = SantizeRavenJObjects(idToken);
                    }

                    result = _shapeConverter.ToFeature(geo, id, pr);
                    return(true);
                }
            }
            result = null;
            return(false);
        }