Exemple #1
0
        public IActionResult JsonPack <T>(JsonBase <T> json, bool CamelCase = false)
        {
            var str    = json.ModelToJson(CamelCase);
            var result = new ContentResult()
            {
                Content     = str,
                ContentType = "application/json"
            };

            //return Json(json);
            return(result);
        }
Exemple #2
0
            public override bool DecodeAll(ref JsonBase thisJson)
            {
                bool changes = false;

                for (int i = 0; i < properties.Count; i++)
                {
                    var val = properties[i] as JsonBase;
                    changes |= val.DecodeAll(ref val);
                }

                return(changes);
            }
Exemple #3
0
        public static IResult <object> GetMember(Type type, JsonBase jsonObject)
        {
            object result;

            switch (jsonObject)
            {
            case JsonString js:
                result = GetFromString(type, js.ToString());
                break;

            case JsonBoolean jb:
                result = jb.ToBoolean();
                break;

            case JsonInteger ji:
                result = ji.ToInteger();
                break;

            case JsonDouble jd:
                result = jd.ToDouble();
                break;

            case JsonArray ja:
                if (GetArray(type, ja).If(out var array, out var exception))
                {
                    result = array;
                }
                else
                {
                    return(failure <object>(exception));
                }

                break;

            case JsonObject jo:
                if (DeserializeObject(type, jo).If(out var obj, out exception))
                {
                    result = obj;
                }
                else
                {
                    return(failure <object>(exception));
                }

                break;

            default:
                return($"Didn't understand {jsonObject}".Failure <object>());
            }

            return(result.Success());
        }
        public void ForceGetArrayPropertyTest()
        {
            var jsonBase = new JsonBase {
                JsonObject = JObject.Parse("{}")
            };

            var result = jsonBase.ForceGetArrayPropertyToken("myArray");

            Assert.IsTrue(result.Type == JTokenType.Array);
            result.Add(JToken.FromObject("Hi There"));

            Debug.WriteLine(result.ToString());
        }
        /// <summary>
        /// 获取已开放县城的信息
        /// </summary>
        /// <param name="json"></param>
        public void GetCountyMessage(string json, int status)
        {
            anhui.MahjongCommonMethod             mcm  = anhui.MahjongCommonMethod.Instance;
            SelectAreaPanelData.CountyMessageData data = new SelectAreaPanelData.CountyMessageData();
            data = JsonBase.DeserializeFromJson <SelectAreaPanelData.CountyMessageData>(json.ToString());
            if (data.CountyData[0].status != 1)
            {
                Debug.LogError("获取已开放县城的信息错误,status:" + data.CountyData[0].status);
                return;
            }

            //保存获取的城市信息
            for (int i = 0; i < data.CountyData.Count; i++)
            {
                for (int j = 0; j < data.CountyData[i].data.Count; j++)
                {
                    int countyId = System.Convert.ToInt32(data.CountyData[i].data[j].countyId);
                    if (mcm._dicDisConfig.ContainsKey(countyId))
                    {
                        mcm._dicDisConfig[countyId].VALID = System.Convert.ToInt32(data.CountyData[i].data[j].flag);
                    }
                }
            }

            //为方法id赋值
            for (int i = 0; i < mcm._districtConfig.Count; i++)
            {
                if (mcm._districtConfig[i].COUNTY_ID == GameData.Instance.SelectAreaPanelData.iCountyId && mcm._districtConfig[i].VALID == 2)
                {
                    string[] id = mcm._districtConfig[i].METHOD.Split('_');
                    for (int k = 0; k < id.Length; k++)
                    {
                        int ID = System.Convert.ToInt16(id[k]);
                        if (ID != 0)
                        {
                            Debug.LogWarning("获取已开放县城的信息");
                            mcm.lsMethodId.Add(ID);
                        }
                    }
                }
            }

            GameData gd = GameData.Instance;
            GamePlayingMethodPanelData gpmpd = gd.GamePlayingMethodPanelData;

            gpmpd.PanelShow = true;
            //gpmpd.GameIndex = 1; //默认打开第一个
            SystemMgr.Instance.GamePlayingMethodSystem.UpdateShow();
        }
Exemple #6
0
            public override bool DecodeAll(ref JsonBase thisJson)
            {
                bool changes = false;

                for (int i = 0; i < values.Count; i++)
                {
                    var val = values[i];
                    if (val.DecodeAll(ref val))
                    {
                        values[i] = val;
                        changes   = true;
                    }
                }

                return(changes);
            }
Exemple #7
0
        public void GetGrade_Round(string json, int status)
        {
            Grade_RoundData_.Clear();
            Grade_RoundMessageData data = new Grade_RoundMessageData();

            data = JsonBase.DeserializeFromJson <Grade_RoundMessageData>(json.ToString());
            if (data.RoundMessageData[0].status != 1)
            {
                Debug.LogError("获取网页json数据状态错误,status:" + data.RoundMessageData[0].status);
                return;
            }
            //将数据保存到list中
            for (int i = 0; i < data.RoundMessageData.Count; i++)
            {
                for (int j = 0; j < data.RoundMessageData[i].data.Count; j++)
                {
                    if (Convert.ToInt32(GradeRoom.disType) != 5 && String.Equals(GradeRoom.disTime, data.RoundMessageData[i].data[j].endTim))
                    {
                        continue;
                    }
                    Grade_RoundData grade = new Grade_RoundData();
                    grade.gameNum        = data.RoundMessageData[i].data[j].gameNum;
                    grade.playing_method = data.RoundMessageData[i].data[j].playing_method;
                    grade.dealer         = data.RoundMessageData[i].data[j].dealer;
                    grade.point[0]       = data.RoundMessageData[i].data[j].point1;
                    grade.point[1]       = data.RoundMessageData[i].data[j].point2;
                    grade.point[2]       = data.RoundMessageData[i].data[j].point3;
                    grade.point[3]       = data.RoundMessageData[i].data[j].point4;
                    grade.nickName[0]    = data.RoundMessageData[i].data[j].nick1;
                    grade.nickName[1]    = data.RoundMessageData[i].data[j].nick2;
                    grade.nickName[2]    = data.RoundMessageData[i].data[j].nick3;
                    grade.nickName[3]    = data.RoundMessageData[i].data[j].nick4;
                    grade.headUrl[0]     = data.RoundMessageData[i].data[j].head1;
                    grade.headUrl[1]     = data.RoundMessageData[i].data[j].head2;
                    grade.headUrl[2]     = data.RoundMessageData[i].data[j].head3;
                    grade.headUrl[3]     = data.RoundMessageData[i].data[j].head4;
                    grade.selfDrawnSeat  = data.RoundMessageData[i].data[j].selfDrawnSeat;
                    grade.shootSeat      = data.RoundMessageData[i].data[j].shootSeat;
                    grade.endTime        = MahjongCommonMethod.Instance.UnixTimeStampToDateTime(Convert.ToDouble(data.RoundMessageData[i].data[j].endTim), 0);
                    grade.replayCode     = String.Format("{0:0000000}", data.RoundMessageData[i].data[j].replayCode);
                    Grade_RoundData_.Add(grade);
                }
            }

            // Debug.LogWarning ("开始产生对应的战绩预置体");
            SpwanHistroyGrade_Round();
        }
Exemple #8
0
        public bool Inspect()
        {
            if (icon.Delete.Click())
            {
                triedToDecodeAll = false;
                json             = new JsonString();
                jsonDestination  = "";
            }

            if (!triedToDecodeAll && "Decode All".Click())
            {
                var str = json.AsJsonString;

                if (str != null)
                {
                    str.dataOnly = false;

                    var sb = new StringBuilder();

                    int index = 0;

                    while (index < str.data.Length && str.data[index] != '{')
                    {
                        sb.Append(str.data[index]);
                        index++;
                    }

                    jsonDestination = sb.ToString();

                    str.data = str.data.Substring(index);
                }

                triedToDecodeAll = true;

                do
                {
                } while (json.DecodeAll(ref json));
            }

            if (jsonDestination.Length > 5)
            {
                jsonDestination.write();
            }

            return(DecodeOrInspectJson(ref json, true));
        }
Exemple #9
0
        static void Main(string[] args)
        {
            JsonBase jsonBase = new JsonBase();

            _agencia = jsonBase.BuscarDados();

            if (_agencia == null)
            {
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.WriteLine("BEM VINDO!");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write("POR FAVOR DIGITE O NOME DA SUA AGÊNCIA DE TRANSPORTES: ");
                _agencia = new Agencia(ValidarLetrasComEspaco(Console.ReadLine()));
            }

            MenuInicial(_agencia, jsonBase);
        }
        public async Task <Profile> GetInternal(string pat)
        {
            using (var vsspsHttpClient = new HttpClient())
            {
                var authByteArray = Encoding.ASCII.GetBytes($"username:{pat}");

                vsspsHttpClient.BaseAddress = new Uri("https://app.vssps.visualstudio.com/");
                vsspsHttpClient.DefaultRequestHeaders.Clear();
                vsspsHttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authByteArray));

                var profileContent = await JsonBase.Get(vsspsHttpClient, "_apis/profile/profiles/me?api-version=5.1");

                var profile = JsonBase.FromJson <Profile>(profileContent);

                return(profile);
            }
        }
Exemple #11
0
        /// <summary>
        /// 获取大厅登录公告内容
        /// </summary>
        /// <param name="json"></param>
        public void GetBulletinData(string json, int status)
        {
            //Debug.LogError("登录公告信息内容:" + json);

            BulletinContentData.Clear();
            lsBulletinContent data = new lsBulletinContent();

            data = JsonBase.DeserializeFromJson <lsBulletinContent>(json.ToString());
            if (data.LoginBulletinData[0].status != 1)
            {
                Debug.LogError("获取网页json数据状态错误,status:" + data.LoginBulletinData[0].status);
                return;
            }

            //表示没有公告,直接显示登陆界面
            if (data.LoginBulletinData[0].data.Count == 0 || SDKManager.Instance.IOSCheckStaus == 1)
            {
                bg.SetActive(false);
                GameData gd = GameData.Instance;
                gd.WXLoginPanelData.isPanelShow = true;
                SystemMgr.Instance.WXLoginSystem.UpdateShow();
                // SDKManager.Instance.iUserId_iAuthType_ServerType = MahjongCommonMethod .Instance .iUserid + LobbyContants.SeverType;//赋值
                if (PlayerPrefs.HasKey(SDKManager.Instance.iUserId_iAuthType_ServerType) && Network.NetworkMgr.Instance.LobbyServer.Connected)
                {
                    SDKManager.Instance.gameObject.GetComponent <CameControler>().PostMsg("loading");//加载loading画面---认证回应
                    GameData.Instance.PlayerNodeDef.isSencondTime = 2;
                    //判断是否过期
                    Debug.LogError("玩家认证类型:===================1");
                    SDKManager.Instance.GetRefreshToken(PlayerPrefs.GetString(SDKManager.Instance.szrefresh_token));
                }
                return;
            }

            for (int i = 0; i < data.LoginBulletinData.Count; i++)
            {
                for (int j = 0; j < data.LoginBulletinData[i].data.Count; j++)
                {
                    BulletinContent content = new BulletinContent();
                    content.title   = data.LoginBulletinData[i].data[j].title;
                    content.content = "\t" + data.LoginBulletinData[i].data[j].content;
                    BulletinContentData.Add(content);
                }
            }

            ShowBulletin();
        }
    // jsonファイルの選択
    public void ChangeJsonDropdown(int index)
    {
        string path = JsonDropDown.captionText.text;

        if (path == "NONE")
        {
            return;
        }

        FileStream   fileStream = new FileStream(JsonFileDirectoryPath + System.IO.Path.DirectorySeparatorChar + path, FileMode.Open, FileAccess.Read);
        BinaryReader bin        = new BinaryReader(fileStream);

        byte[] readBinary = bin.ReadBytes((int)bin.BaseStream.Length);
        bin.Close();
        fileStream.Dispose();
        fileStream = null;
        string text = System.Text.Encoding.UTF8.GetString(readBinary);

        readBinary = null;

        // AyatakaのJsonファイルフォーマットは、そのままJsonUtilityで読めるフォーマットにはなっていない(はず)なので、
        // データ名タグを追加
        text = "{\"jsonData\": " + text + "}";

        JsonBaseData = JsonUtility.FromJson <JsonBase>(text);
        List <string> atlasList = new List <string>();

        for (int i = 0; i < JsonBaseData.jsonData.Length; i++)
        {
            if (string.IsNullOrEmpty(JsonBaseData.jsonData[i].atlas) == false)
            {
                // imagesとbgは、それその物を参照する物ではないらしいので、弾く
                if (JsonBaseData.jsonData[i].atlas.IndexOf("ui-atlas" + "/" + "images") == -1)
                {
                    if (JsonBaseData.jsonData[i].atlas.IndexOf("ui-atlas" + "/" + "bg") == -1)
                    {
                        atlasList.Add(JsonBaseData.jsonData[i].nameKey);
                    }
                }
            }
        }
        ImageTagDropDown.ClearOptions();
        atlasList.Insert(0, "NONE");
        ImageTagDropDown.AddOptions(atlasList);
    }
Exemple #13
0
        internal static void MenuViajar(Agencia agencia, JsonBase jsonBase)
        {
            while (true)
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.WriteLine($"AGÊNCIA: {agencia.NomeAgencia.ToUpper()}");
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.WriteLine("SELECIONE UMA OPÇÃO DE [1] A [2]\n");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine("[1] - PROGRAMAR VIAGEM");
                Console.WriteLine("[2] - EXECUTAR VIAGEM");
                Console.WriteLine("[ESC] - VOLTAR AO MENU INICIAL");

                ConsoleKeyInfo tecla = Console.ReadKey();

                switch (tecla.Key)
                {
                case ConsoleKey.Escape:
                    MenuInicial(agencia, jsonBase);
                    break;

                case ConsoleKey.NumPad1:
                    agencia.ProgramarViagem();
                    jsonBase.Salvar(agencia);
                    Console.Write("\nPRESSIONE QUALQUER TECLA PARA VOLTAR..");
                    Console.ReadKey();
                    break;

                case ConsoleKey.NumPad2:
                    agencia.ExecutarViagem();
                    jsonBase.Salvar(agencia);
                    Console.Write("\nPRESSIONE QUALQUER TECLA PARA VOLTAR..");
                    Console.ReadKey();
                    break;

                default:
                    Console.Write("\nPRESSIONE QUALQUER TECLA PARA VOLTAR..");
                    Console.ReadKey();
                    MenuViajar(agencia, jsonBase);
                    break;
                }
            }
            ;
        }
        protected static void TryDecode(ref JsonBase j)
        {
            if (!(j is JsonString str))
            {
                return;
            }

            var tmp = str.TryDecodeString();

            if (tmp != null)
            {
                j = tmp;
            }
            else
            {
                str.dataOnly = true;
            }
        }
Exemple #15
0
            public override bool DecodeAll(ref JsonBase thisJson)
            {
                if (!dataOnly)
                {
                    var tmp = TryDecodeString();
                    if (tmp != null)
                    {
                        thisJson = tmp as JsonBase;
                        return(true);
                    }
                    else
                    {
                        dataOnly = true;
                    }
                }

                return(false);
            }
Exemple #16
0
        /// <summary>
        /// 获取玩家的下级推广员的数量
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public void GetProductCount(string json, int status)
        {
            int          count = 0;
            ProductData_ data  = new ProductData_();

            data = JsonBase.DeserializeFromJson <ProductData_>(json.ToString());

            if (data.Product[0].status == 1)
            {
                count = data.Product[0].sp_num;
                //Debug.LogError("count:" + data.Product[0].sp_num);
            }

            if (count > 0 && PlayerPrefs.GetFloat(Guide.Promote.ToString()) == 0)
            {
                OpenIndexGuide(Guide.Promote);
            }
        }
        public void JsonBaseSeriailize_TEST()
        {
            var jbase = new JsonBase <TestEnum> {
                Status  = TestEnum.A,
                Message = "aaa",
                Content = "bbb"
            };
            var json = JsonConvert.SerializeObject(jbase);

            Assert.Equal("{\"status\":0,\"msg\":\"aaa\",\"content\":\"bbb\"}", json);

            var jbase2 = new JsonBase <TestEnum> {
                Status  = TestEnum.A,
                Message = "aaa"
            };
            var json2 = JsonConvert.SerializeObject(jbase2);

            Assert.Equal("{\"status\":0,\"msg\":\"aaa\"}", json2);
        }
        async Task LoadDataAsync(string uri)
        {
            string responseJsonString = null;

            using (var httpClient = new WebClient())
            {
                try
                {
                    //Task<HttpResponseMessage> getResponse = httpClient.GetAsync(uri);
                    // HttpResponseMessage response = await getResponse;
                    responseJsonString = httpClient.DownloadString(uri);
                    //responseJsonString = await response.Content.ReadAsStringAsync();
                    Response = JsonBase <SomeObjectTHatUwant> .ReturnResultsList(responseJsonString);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
Exemple #19
0
        protected static bool TryDecode(ref JsonBase j)
        {
            var str = j as JsonString;

            if (str != null)
            {
                var tmp = str.TryDecodeString();
                if (tmp != null)
                {
                    j = tmp as JsonBase;
                    return(true);
                }
                else
                {
                    str.dataOnly = true;
                }
            }

            return(false);
        }
Exemple #20
0
        private JsonData JngsSgyParser(JsonData jsobj)
        {
            JsonData jret = null;
            JsonBase jbr  = null;

            if (jsobj != null)
            {
                #region 统一代码
                try
                {
                    if (jsobj != null)
                    {
                        string optaction = "mobile_BLL.Interface." + jsobj["optstring"].ToString() + ",mobile_BLL";
                        Type   type      = Type.GetType(optaction);
                        jbr = (JsonBase)Activator.CreateInstance(type, jsobj["optdata"]);
                    }
                    if (jbr != null)
                    {
                        jbr.strBaseUrl  = HttpContext.Current.Request.Url.AbsoluteUri;
                        jbr.strBaseUrl  = jbr.strBaseUrl.Replace(HttpContext.Current.Request.Url.AbsolutePath, "");
                        jbr.strBaseUrl += HttpContext.Current.Request.ApplicationPath;
                        StringBuilder      sb = new StringBuilder();
                        LitJson.JsonWriter jw = new LitJson.JsonWriter(sb);
                        jw.WriteObjectStart();
                        jw.WritePropertyName("result");
                        jw.Write("");
                        jw.WriteObjectEnd();
                        jret           = JsonMapper.ToObject(sb.ToString());
                        jret["result"] = (JsonData)jbr.GetData();
                    }
                }
                catch (Exception ex)
                {
                    BaseDal.RecordError("json数据返回出错_get_data.ashx", ex.ToString());
                }
                #endregion
            }

            return(jret);
        }
Exemple #21
0
        private void Add(HttpMessage http, object data, Suffix suffix = Suffix.None)
        {
            if (http == null)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            if (JsonBase.IsJson(http.Data))
            {
                data = JsonPacket.Parse(http.Data);
            }
            else if (IsHandshake(http.Data))
            {
                data = http.Data;
            }

            sb.Append(http.Message.Substring(0, http.Message.Length - HttpMessage.EndOfMessage.Length));

            if (data != null)
            {
                sb.Append(HttpMessage.EndOfMessage);
                sb.Append(data);
            }

            switch (suffix)
            {
            case Suffix.EOL:
            {
                sb.Append(Constant.Newline);
                sb.Append("________________________________________________________________________________________________________________________________________________________________________________________________");
                break;
            }
            }

            sb.Append(Constant.Newline);

            Add(sb);
        }
Exemple #22
0
        /// <summary>
        /// 获取已开放城市的信息
        /// </summary>
        /// <param name="json"></param>
        public void GetCityMessage(string json, int status)
        {
            listCityMessage.Clear();
            CityMessageData data = new CityMessageData();

            data = JsonBase.DeserializeFromJson <CityMessageData>(json.ToString());
            if (data.CityData[0].status != 1)
            {
                Debug.LogError("获取网页json数据状态错误,status:" + data.CityData[0].status);
                return;
            }


            ParlorShowPanelData pspd = GameData.Instance.ParlorShowPanelData;

            //保存获取的城市信息
            for (int i = 0; i < data.CityData.Count; i++)
            {
                for (int j = 0; j < data.CityData[i].data.Count; j++)
                {
                    CityMessage message = new CityMessage();
                    message.cityId   = data.CityData[i].data[j].cityId;
                    message.cityName = data.CityData[i].data[j].cityName;
                    message.flag     = data.CityData[i].data[j].flag;
                    listCityMessage.Add(message);
                    if (System.Convert.ToInt16(message.flag) == 2)
                    {
                        pspd.listCityMessage.Add(message);
                    }
                }
            }
            //获取城市信息成功
            isGetCitySuccess = true;

            if (isGetCountySuccess)
            {
                //改变地图大小
                UIMainView.Instance.SelectAreaPanel.ChangeScale();
            }
        }
Exemple #23
0
        protected static bool DecodeOrInspectJson(ref JsonBase j, bool foldedOut, string name = "")
        {
            var str = j.AsJsonString;

            if (str != null)
            {
                if (str.dataOnly)
                {
                    if (!foldedOut)
                    {
                        name.edit(ref str.data);

                        if (name.Length > 7 && icon.Copy.Click("Copy name to clipboard", 15))
                        {
                            GUIUtility.systemCopyBuffer = name;
                        }
                    }
                }
                else if (foldedOut && "Decode 1 layer".Click())
                {
                    TryDecode(ref j);
                }


                pegi.nl();
            }


            if (!foldedOut)
            {
                return(false);
            }

            var changed = j.Inspect().nl();



            return(changed);
        }
        public async Task <OrganizationList> ReadOrganizations(string PAT)
        {
            Console.WriteLine("Reading Organizations");

            var organizationList = new OrganizationList();

            var authByteArray = Encoding.ASCII.GetBytes($"username:{PAT}");

            using (HttpClient vsspsHttpClient = new HttpClient())
            {
                vsspsHttpClient.BaseAddress = new Uri("https://vssps.dev.azure.com");
                vsspsHttpClient.DefaultRequestHeaders.Clear();
                vsspsHttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authByteArray));

                var profile = await GetInternal(PAT);

                var organizationListContent = await JsonBase.Get(vsspsHttpClient, $"_apis/accounts?memberId={profile.Id}&api-version=5.1");

                organizationList = JsonBase.FromJson <OrganizationList>(organizationListContent);
            }

            return(organizationList);
        }
        /// <summary>
        /// 获取已开放城市的信息
        /// </summary>
        /// <param name="json"></param>
        public void GetCityMessage(string json, int status)
        {
            anhui.MahjongCommonMethod           mcm  = anhui.MahjongCommonMethod.Instance;
            SelectAreaPanelData.CityMessageData data = new SelectAreaPanelData.CityMessageData();
            data = JsonBase.DeserializeFromJson <SelectAreaPanelData.CityMessageData>(json.ToString());
            if (data.CityData[0].status != 1)
            {
                Debug.LogError("获取网页json数据状态错误,status:" + data.CityData[0].status);
                return;
            }

            //保存获取的城市信息
            for (int i = 0; i < data.CityData.Count; i++)
            {
                for (int j = 0; j < data.CityData[i].data.Count; j++)
                {
                    int cityId = System.Convert.ToInt32(data.CityData[i].data[j].cityId);
                    if (mcm._dicCityConfig.ContainsKey(cityId))
                    {
                        mcm._dicCityConfig[cityId].VALID = System.Convert.ToInt32(data.CityData[i].data[j].flag);
                    }
                }
            }
        }
 public JToken ToToken(T value, JsonBase jsonBase) => value?.JsonObject ?? new JObject();
 public T GetPropertyValue(JsonBase jsonBase, string propertyName) =>
 FromToken(jsonBase.ForceGetObjectPropertyToken(propertyName), jsonBase);
 public T FromToken(JToken token, JsonBase jsonBase) =>
 jsonBase.Factory.Create <T>(token.ToTokenTypeOrEmptyObject <JObject>());
 public JToken ToToken(T value, JsonBase jsonBase) => (value as IJsonList)?.JsonArray ?? new JArray();
 public T FromToken(JToken token, JsonBase jsonBase) =>
 new JsonArrayListWrapper <V>(token.ToTokenTypeOrEmptyObject <JArray>(), jsonBase) as T;