private WSJProperty getFieldJson(WSTableParam param, WSJson json)
        {
            WSJProperty fJson = null;

            if (json is WSJObject)
            {
                fJson = ((WSJObject)json).Value.FirstOrDefault(x => param.Match(x.Key));
            }
            else if (json is WSJArray)
            {
                fJson = ((WSJArray)json).Value.OfType <WSJObject>().FirstOrDefault(x => param.Match(x.Value[0].Key)).Value[0];
            }
            return(fJson);
        }
        private List <WSMemberSchema> readFieldSchema(WSJProperty json, out bool replace)// json => WSJValue || WSJProperty || WSJObject
        {
            replace = true;
            List <WSMemberSchema> fSchema = new List <WSMemberSchema>();

            try
            {
                if (json != null && Source != null)
                {
                    if (!string.IsNullOrEmpty(json.Key))
                    {
                        WSTableParam param = (WSTableParam)Source.GetXParam(json.Key);
                        if (param != null && param.isValid)
                        {
                            replace = true;
                            if (param.DataType.IsSimple() || param.DataType.IsSimpleCollection())
                            {
                                fSchema.Add(new WSPrimitiveFieldSchema(Func, param, json, this));
                            }
                            else if (json.IsValid)
                            {
                                WSTableSource source = (WSTableSource)Func.GetSourceByType(param.DataType.GetEntityType());
                                if (source != null)
                                {
                                    if (param.Match(json.Key))
                                    {
                                        if (param.DataType.IsSameOrSubclassOf(typeof(WSEntity)))
                                        {
                                            fSchema.Add(new WSEntitySchema(source, json, Func, this));
                                        }
                                        else if (param.DataType.IsCollectionOf <WSEntity>())
                                        {
                                            fSchema.Add(new WSEntityListSchema(param, json, Func, this));
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            #region SET '*' [ALL PRIMITIVE FIELDS] Filter
                            if (WSConstants.ALIACES.ALL_PRIMITIVE_FIELDS.Match(json.Key))
                            {
                                replace = false;

                                IEnumerable <WSTableParam> DBPrimitiveParams =
                                    Source.DBPrimitiveParams.Any() ?
                                    Source.DBPrimitiveParams.Where(x => Func.IsAccessible(x.READ_ACCESS_MODE.ACCESS_LEVEL)) :
                                    new List <WSTableParam>();
                                IEnumerable <WSJValue> all_primitive_params =
                                    DBPrimitiveParams.Any() ?
                                    DBPrimitiveParams.Select(x => new WSJValue(x.DISPLAY_NAME)) :
                                    new List <WSJValue>();

                                foreach (WSJValue _item in all_primitive_params)
                                {
                                    WSMemberSchema schema = Source.BaseSchema.Fields.FirstOrDefault(x => x.Name.Equals(_item.Value));
                                    if (schema != null)
                                    {
                                        fSchema.Add(schema);
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                }
            }
            catch (Exception e) { WSStatus status = WSStatus.NONE.clone(); Func.RegError(GetType(), e, ref status); }
            return(fSchema);
        }