private async Task <List <ObjectMember> > GetObjectMembers(string id, string type)
        {
            ObjectRef obj  = ObjectRef.FromEncodedString(id);
            ClassInfo info = objTypes[type];

            MemberRef[]        members   = info.SimpleMember.Select(m => MemberRef.Make(obj, m.Name)).ToArray();
            List <MemberValue> memValues = await Connection.GetMemberValues(members);

            var values = new List <ObjectMember>();

            for (int i = 0; i < info.SimpleMember.Count; ++i)
            {
                SimpleMember m = info.SimpleMember[i];
                if (m.Type == DataType.LocationRef && !hasLocations)
                {
                    continue;
                }

                MemberValue v            = memValues[i];
                string      defaultValue = "";
                if (m.DefaultValue.HasValue && m.Dimension != Dimension.Array)
                {
                    defaultValue = m.DefaultValue.Value.JSON;
                }
                else if (m.Type == DataType.Struct)
                {
                    defaultValue = StdJson.ObjectToString(GetStructDefaultValue(m) !, indented: true, ignoreShouldSerializeMembers: false);
                    //Console.WriteLine("=> " + m.Name + ": " + defaultValue);
                }
                else if (m.Type == DataType.LocationRef && rootLocation.HasValue)
                {
                    defaultValue = DataValue.FromLocationRef(rootLocation.Value).JSON;
                }
                else
                {
                    defaultValue = DataValue.FromDataType(m.Type, 1).JSON;
                }
                var member = new ObjectMember()
                {
                    Key           = obj.ToEncodedString() + "__" + m.Name,
                    Name          = m.Name,
                    Type          = m.Type.ToString(),
                    IsScalar      = m.Dimension == Dimension.Scalar,
                    IsOption      = m.Dimension == Dimension.Optional,
                    IsArray       = m.Dimension == Dimension.Array,
                    Category      = m.Category,
                    Browseable    = m.Browseable,
                    Value         = new JRaw(v.Value.JSON),
                    ValueOriginal = new JRaw(v.Value.JSON),
                    EnumValues    = ResolveEnum(m),
                    StructMembers = ResolveStruct(m),
                    DefaultValue  = defaultValue
                };
                values.Add(member);
            }
            return(values);
        }