Example #1
0
        /// <summary>
        /// 将客户端的文件上传到服务器
        /// </summary>
        /// <param name="clientFileName"></param>
        /// <returns></returns>
        public static String SaveFileToServer(System.Web.UI.WebControls.FileUpload file1)
        {
            String result = String.Empty;

            try
            {
                if (file1.HasFile)
                {
                    String clientFileName = file1.FileName;
                    String dir1           = "/Attachment/UseAttachment/";

                    HttpServerUtility server1 = System.Web.HttpContext.Current.Server;
                    if (Directory.Exists(server1.MapPath(dir1)) == false)
                    {
                        Directory.CreateDirectory(server1.MapPath(dir1));
                    }
                    String ext = Path.GetExtension(clientFileName);
                    dir1 = dir1 + JString.GetUnique32ID() + ext;

                    file1.SaveAs(server1.MapPath(dir1));
                    result = dir1;
                }
            }
            catch (Exception err)
            {
                result = String.Empty;
            }
            return(result);
        }
Example #2
0
        public void TestFromJson()
        {
            JString jstring = new JString("*");
            WildCardContainer <string> s = WildCardContainer <string> .FromJson(jstring, u => u.AsString());

            s.Should().BeEmpty();

            jstring = new JString("hello world");
            Action action = () => WildCardContainer <string> .FromJson(jstring, u => u.AsString());

            action.Should().Throw <FormatException>();

            JObject alice = new JObject();

            alice["name"] = "alice";
            alice["age"]  = 30;
            JArray jarray = new JArray {
                alice
            };
            WildCardContainer <string> r = WildCardContainer <string> .FromJson(jarray, u => u.AsString());

            r[0].Should().Be("{\"name\":\"alice\",\"age\":30}");

            JBoolean jbool = new JBoolean();

            action = () => WildCardContainer <string> .FromJson(jbool, u => u.AsString());

            action.Should().Throw <FormatException>();
        }
Example #3
0
        private static string TTL(string text)
        {
            List <string> lines = new List <string>();

            foreach (string fLine in StringTools.Tokenize(text, "\r\n"))
            {
                string line = fLine;

                line = JString.ToJString(line, true, false, false, true, false);

                if (1000 < line.Length)
                {
                    line = line.Substring(0, 990) + " ...";
                }

                if (line != "")
                {
                    lines.Add(line);
                }

                if (1000 < lines.Count)
                {
                    break;
                }
            }
            return(string.Join("\n", lines));
        }
Example #4
0
        public JString toJString()
        {
            global::System.IntPtr cPtr = JNIPINVOKE.JObject_toJString(swigCPtr);
            JString ret = (cPtr == global::System.IntPtr.Zero) ? null : new JString(cPtr, false);

            return(ret);
        }
Example #5
0
        public void TestToJson()
        {
            NEP6Contract nep6Contract = new NEP6Contract()
            {
                Script         = new byte[] { 0x00, 0x01 },
                ParameterList  = new ContractParameterType[] { ContractParameterType.Boolean, ContractParameterType.Integer },
                ParameterNames = new string[] { "param1", "param2" },
                Deployed       = false
            };

            JObject @object = nep6Contract.ToJson();
            JString jString = (JString)@object["script"];

            jString.Value.Should().Be(nep6Contract.Script.ToHexString());

            JBoolean jBoolean = (JBoolean)@object["deployed"];

            jBoolean.Value.Should().BeFalse();

            JArray parameters = (JArray)@object["parameters"];

            parameters.Count.Should().Be(2);

            jString = (JString)(parameters[0]["name"]);
            jString.Value.Should().Be("param1");
            jString = (JString)(parameters[0]["type"]);
            jString.Value.Should().Be(ContractParameterType.Boolean.ToString());

            jString = (JString)(parameters[1]["name"]);
            jString.Value.Should().Be("param2");
            jString = (JString)(parameters[1]["type"]);
            jString.Value.Should().Be(ContractParameterType.Integer.ToString());
        }
Example #6
0
        /// </summary>
        /// <param name="newPassWord"></param>
        /// <returns></returns>
        public bool UpdatePassWord(String UserName, String oldPassWord, String newPassWord)
        {
            bool succ = false;

            if (String.IsNullOrEmpty(UserName) == false)
            {
                JTable             tab1      = new JTable(TableName);
                List <SearchField> condition = new List <SearchField>();
                condition.Add(new SearchField("UserName", UserName));
                DataSet ds1 = tab1.SearchData(condition, 1, "*");
                if (ds1 != null && ds1.Tables[0].Rows.Count > 0)
                {
                    DataRow dr1 = ds1.Tables[0].Rows[0];
                    if (JString.MD5(oldPassWord) == dr1["password"].ToString())
                    {
                        succ            = true;
                        dr1["password"] = JString.MD5(newPassWord);
                        tab1.Update(ds1.Tables[0]);
                    }
                }
                ds1.Dispose();
                tab1.Close();
            }
            return(succ);
        }
Example #7
0
        public static string GetFairFullPath(string path)
        {
            using (WorkingDir wd = new WorkingDir())
            {
                string argsFile = wd.MakePath();
                string outFile  = wd.MakePath();
                string molp     = SecurityTools.MakePassword_9();

                string[] args =
                {
                    "//O",
                    outFile,
                    "//MOLP",
                    molp,
                    "//-E",
                    "//$",
                    JString.AsLine(path),
                };

                File.WriteAllLines(argsFile, args, StringTools.ENCODING_SJIS);

                ProcessTools.Start(@"C:\Factory\Bodewig\DenebolaToolkit\FairFullPath.exe", "//R \"" + argsFile + "\"").WaitForExit();

                string[] outLines = File.ReadAllLines(outFile, StringTools.ENCODING_SJIS)
                                    .Where(v => v.StartsWith(molp))
                                    .Select(v => v.Substring(molp.Length)).ToArray();

                if (outLines.Length != 1)
                {
                    throw new Exception("不正なパス文字列です。");
                }

                return(outLines[0]);
            }
        }
Example #8
0
        public void TestParse()
        {
            TextReader tr = new StringReader("\"hello world\"");
            String     s  = JString.Parse(tr).Value;

            Assert.AreEqual("hello world", s);

            tr = new StringReader("hello world");
            Assert.ThrowsException <FormatException>(() => JString.Parse(tr));

            tr = new StringReader("\"\\s\"");
            Assert.ThrowsException <FormatException>(() => JString.Parse(tr));

            tr = new StringReader("\"\\\"\\\\\\/\\b\\f\\n\\r\\t\"");
            s  = JString.Parse(tr).Value;
            Assert.AreEqual("\"\\/\b\f\n\r\t", s);

            tr = new StringReader("\"\\u0030\"");
            s  = JString.Parse(tr).Value;
            Assert.AreEqual("0", s);

            tr = new StringReader("\"a");
            Assert.ThrowsException <FormatException>(() => JString.Parse(tr));

            byte[] byteArray = new byte[] { 0x22, 0x01, 0x22 };
            tr = new StringReader(System.Text.Encoding.ASCII.GetString(byteArray));
            Assert.ThrowsException <FormatException>(() => JString.Parse(tr));
        }
Example #9
0
        public void JTokenToStringPressedTest()
        {
            JNumber n    = new JNumber(7.3);
            JNumber n2   = new JNumber(42);
            JNumber n3   = new JNumber(3.14);
            JString s    = new JString("example");
            JBool   b    = new JBool(true);
            JNull   nu   = new JNull();
            JArray  aa   = new JArray();
            JToken  root = new JToken();
            JToken  t    = new JToken();
            JToken  tt   = new JToken();
            JRoot   r    = new JRoot();

            r["mnau"]           = root;
            root["dalsi cislo"] = n;
            root["token"]       = t;
            t["inside"]         = aa;
            t["string"]         = s;
            aa.Add(n2);
            aa.Add(b);
            aa.Add(tt);
            tt["cislo"] = n3;
            tt["nil"]   = (nu);

            try { aa.Add(nu); }
            catch (JsonDuplicatedException e) { Console.WriteLine("zkusili jsme pridat podruhe"); }

            Console.WriteLine(root.ToStringPressed());
            Console.WriteLine(root.ToString());
            Console.WriteLine(r.ToStringPressed());
            Console.WriteLine(r.ToString());
        }
Example #10
0
        public void JStringFillTest()
        {
            JString s = new JString("Value");

            Assert.IsNotNull(s);
            Assert.AreEqual("Value", s.Value);
        }
Example #11
0
        /// <summary>
        /// 功能说明:更新密码
        /// </summary>
        /// <param name="oldpass">旧密码</param>
        /// <param name="newPass">新密码</param>
        /// <returns></returns>
        public String ChangeOldPassWord(String UserID,
                                        String oldpass, String newPass)
        {
            String error = String.Empty;

            if (String.IsNullOrEmpty(oldpass) == false &&
                String.IsNullOrEmpty(newPass) == false)
            {
                JUserDA            da1       = new JUserDA();
                List <SearchField> condition = new List <SearchField>();

                condition.Add(new SearchField("UserID", UserID));
                DataRow dr1 = da1.GetFirstDataRow(condition, "*");
                if (dr1 != null)
                {
                    String pass0 = dr1["password"].ToString().Trim();
                    String pass1 = oldpass;
                    String pass2 = JString.MD5(pass1);
                    if (pass1 == pass0 || pass2 == pass0)
                    {
                        String pass3 = JString.MD5(newPass);
                        Dictionary <string, object> data1 = new Dictionary <string, object>();
                        data1["password"] = pass3;
                        da1.EditData(condition, data1);
                    }
                    else
                    {
                        error = "提示:老密码输入不正确,请重新输入!";
                    }
                }
            }
            return(error);
        }
Example #12
0
        public void JTokenToStringPressedTest()
        {
            JArray  a    = new JArray("test");
            JNumber n    = new JNumber("number", 7.3);
            JString s    = new JString("string", "example");
            JBool   b    = new JBool("bool", true);
            JNull   nu   = new JNull("nil");
            JArray  aa   = new JArray("inside");
            JToken  root = new JToken("root");
            JToken  t    = new JToken("token");
            JToken  tt   = new JToken("token2");

            aa.Value.Add(n);
            aa.Value.Add(b);
            tt.Value.Add(b);
            tt.Value.Add(nu);
            aa.Value.Add(tt);
            a.Value.Add(s);
            a.Value.Add(aa);
            a.Value.Add(n);
            t.Value.Add(aa);
            t.Value.Add(s);
            root.Value.Add(n);
            root.Value.Add(t);
            Console.WriteLine(root.ValueToStringPressed());
            Assert.AreEqual("{\"number\":7.3,\"token\":{\"inside\":[7.3,true,{\"bool\":true,\"nil\":null}],\"string\":\"example\"}}", root.ValueToStringPressed());
        }
Example #13
0
        public void JTokenToStringTest()
        {
            JArray  a    = new JArray("test");
            JNumber n    = new JNumber("number", 7.3);
            JString s    = new JString("string", "example");
            JBool   b    = new JBool("bool", true);
            JNull   nu   = new JNull("nil");
            JArray  aa   = new JArray("inside");
            JToken  root = new JToken("root");
            JToken  t    = new JToken("token");
            JToken  tt   = new JToken("token2");

            aa.Value.Add(n);
            aa.Value.Add(b);
            tt.Value.Add(b);
            tt.Value.Add(nu);
            aa.Value.Add(tt);
            a.Value.Add(s);
            a.Value.Add(aa);
            a.Value.Add(n);
            t.Value.Add(aa);
            t.Value.Add(s);
            root.Value.Add(n);
            root.Value.Add(t);
            Console.WriteLine(root.ValueToString(0));
            Assert.Fail();
        }
        public IActionResult GetBlockHeader(string hash, int index, bool verbose = false)
        {
            JObject key;
            Header  header;

            if (hash != null)
            {
                key = new JString(hash);
                UInt256 _hash = UInt256.Parse(key.AsString());
                header = Blockchain.Singleton.View.GetHeader(_hash);
            }
            else
            {
                key = new JNumber(index);
                uint height = uint.Parse(key.AsString());
                header = Blockchain.Singleton.GetHeader(height);
            }
            if (header == null)
            {
                throw new RestException(-100, "Unknown block");
            }
            if (verbose)
            {
                JObject json = header.ToJson();
                json["confirmations"] = Blockchain.Singleton.Height - header.Index + 1;
                UInt256 _hash = Blockchain.Singleton.GetNextBlockHash(header.Hash);
                if (_hash != null)
                {
                    json["nextblockhash"] = _hash.ToString();
                }
                return(FormatJson(json));
            }

            return(FormatJson(header.ToArray().ToHexString()));
        }
Example #15
0
        public void JArrayToStringTest()
        {
            JArray  a    = new JArray();
            JNumber n    = new JNumber(42);
            JNumber n2   = new JNumber(7.3);
            JString s    = new JString("pokus");
            JString s2   = new JString("pokus2");
            JBool   b    = new JBool(true);
            JBool   b2   = new JBool(false);
            JNull   nu   = new JNull();
            JNull   nu2  = new JNull();
            JNull   nu3  = new JNull();
            JToken  t    = new JToken();
            JRoot   root = new JRoot();

            root["pole"] = a;
            a.Add(n);
            a.Add(s);
            a.Add(b);
            a.Add(nu);
            a.Add(t);
            t["string"] = s2;
            t["nill"]   = nu2;
            t["cislo"]  = n2;
            Console.WriteLine(a.ToString());
            JArray aa = new JArray();

            a.Add(aa);
            aa.Add(nu3);
            aa.Add(b2);
            Console.WriteLine(a.ToString());
        }
Example #16
0
        internal JValue parseValue()
        {
            char chr = stringPointer.getNextNonWhiteChar();

            if (chr == '"')
            {
                return(JString.zParse(this, false));
            }
            else if (chr == '-' || (chr >= '0' && chr <= '9'))
            {
                return(JNumber.zParse(this, chr));
            }
            else if (chr == '{')
            {
                return(JSON.zParse(this, false, false, false));
            }
            else if (chr == '[')
            {
                return(JArray.zParse(this, false));
            }
            else if (chr == 't' || chr == 'f')
            {
                return(JBoolean.zParse(this, (chr == 't')));
            }
            else if (chr == 'n')
            {
                return(JNull.zParse(this));
            }
            else
            {
                throw ParseException.forInvalidCharacter("Invalid character '" + chr + "' when expecting start of any value", this);
            }
        }
Example #17
0
            public static string AccessKey(string accessKey)
            {
                accessKey = JString.ToJString(accessKey, true, false, false, true).Trim();

                Utilities.CheckLength(accessKey, 1, Consts.ACCESS_KEY_LEN_MAX, "アクセスキー");

                return(accessKey);
            }
Example #18
0
            public static string GroupName(string name)
            {
                name = JString.ToJString(name, true, false, false, true).Trim();

                Utilities.CheckLength(name, 1, Consts.GROUP_NAME_LEN_MAX, "グループ名");

                return(name);
            }
Example #19
0
        public void JStringValueToStrinTest()
        {
            JString s = new JString("", "Value");

            Assert.IsNotNull(s);
            Console.WriteLine(s.ValueToString(0));
            Assert.AreEqual("\"Value\"", s.ValueToString(0));
        }
Example #20
0
        public void TestConstructor()
        {
            String  s       = "hello world";
            JString jstring = new JString(s);

            Assert.AreEqual(s, jstring.Value);
            Assert.ThrowsException <ArgumentNullException>(() => new JString(null));
        }
        public void ParsesQuotations()
        {
            var empty    = Tokenize("\"\"");
            var filled   = Tokenize("\"abc \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\u263a def\"");
            var expected = new JString("abc \" \\ / \b \f \n \r \t ☺ def");

            Json.Parses(empty).WithValue(new JString(""));
            Json.Parses(filled).WithValue(expected);
        }
Example #22
0
        public void JStringToStringPressedTest()
        {
            JString s = new JString("Value");

            Assert.IsNotNull(s);
            Assert.AreEqual("Value", s.Value);
            Console.WriteLine(s.ToString());
            Assert.AreEqual("\"Value\"", s.ToString());
        }
Example #23
0
        public void TestAsBoolean()
        {
            String  s1       = "hello world";
            String  s2       = "";
            JString jstring1 = new JString(s1);
            JString jstring2 = new JString(s2);

            Assert.AreEqual(true, jstring1.AsBoolean());
            Assert.AreEqual(false, jstring2.AsBoolean());
        }
Example #24
0
        // =================================================================================
        // Import
        // ---------------------------------------------------------------------------------
        public static bool Import(iCS_VisualScriptData storage, string path)
        {
            // -- Decode JSON string. --
            JObject root = JSONFile.Read(path);

            if (root == null || root.isNull)
            {
                Debug.LogWarning("iCanScript: Import failure: JSON file corrupted.");
                return(false);
            }
            // -- Extract version information. --
            var     cache         = new iCS_VisualScriptData();
            JNumber majorVersion  = root.GetValueFor("Storage.MajorVersion") as JNumber;
            JNumber minorVersion  = root.GetValueFor("Storage.MinorVersion") as JNumber;
            JNumber bugFixVersion = root.GetValueFor("Storage.BugFixVersion") as JNumber;

            cache.MajorVersion  = (int)majorVersion.value;
            cache.MinorVersion  = (int)minorVersion.value;
            cache.BugFixVersion = (int)bugFixVersion.value;
            // -- Extract visual script attributes. --
            JBool   isEditorScript   = root.GetValueFor("Storage.IsEditorScript") as JBool;
            JString csharpFileName   = root.GetValueFor("Storage.CSharpFileName") as JString;
            JBool   baseTypeOverride = root.GetValueFor("Storage.BaseTypeOverride") as JBool;
            JString baseType         = root.GetValueFor("Storage.BaseType") as JString;
            JString sourceFileGUID   = root.GetValueFor("Storage.SourceFileGUID") as JString;

            cache.IsEditorScript   = isEditorScript.value;
            cache.CSharpFileName   = csharpFileName.value;
            cache.BaseTypeOverride = baseTypeOverride.value;
            cache.BaseType         = baseType.value;
            cache.SourceFileGUID   = sourceFileGUID.value;
            // -- Extract engine objects. --
            JArray engineObjects = root.GetValueFor("Storage.EngineObjects") as JArray;

            if (engineObjects == null)
            {
                Debug.LogWarning("iCanScript: Import failure: Unable to locate engine array.");
                return(false);
            }
            cache.EngineObjects.Capacity = engineObjects.value.Length;
            foreach (var eobj in engineObjects.value)
            {
                var newObj = ReadEngineObject(eobj as JObject);
                if (newObj != null)
                {
                    cache.EngineObjects.Add(newObj);
                }
                else
                {
                    Debug.LogWarning("iCanScript: Unable to create instance of iCS_EngineObject");
                }
            }
            cache.CopyTo(storage);
            return(true);
        }
Example #25
0
        public void TestGetEnum()
        {
            JString s   = "James";
            Woo     woo = s.GetEnum <Woo>();

            Assert.AreEqual(Woo.James, woo);

            s   = "";
            woo = s.AsEnum(Woo.Jerry, false);
            Assert.AreEqual(Woo.Jerry, woo);
        }
Example #26
0
        public void TestTryGetEnum()
        {
            JString s = new JString("Signature");
            ContractParameterType cp = s.TryGetEnum <ContractParameterType>(ContractParameterType.Void, false);

            Assert.AreEqual(ContractParameterType.Signature, cp);

            s  = new JString("");
            cp = s.TryGetEnum <ContractParameterType>(ContractParameterType.Void, false);
            Assert.AreEqual(ContractParameterType.Void, cp);
        }
Example #27
0
        public void TestAsNumber()
        {
            string  s1       = "hello world";
            string  s2       = "123";
            string  s3       = "";
            JString jstring1 = new JString(s1);
            JString jstring2 = new JString(s2);
            JString jstring3 = new JString(s3);

            Assert.AreEqual(double.NaN, jstring1.AsNumber());
            Assert.AreEqual(123, jstring2.AsNumber());
            Assert.AreEqual(0, jstring3.AsNumber());
        }
Example #28
0
        public void JStringToStringPressedTest()
        {
            JString s = new JString("test")
            {
                Value = "Value"
            };

            Assert.IsNotNull(s);
            Assert.AreEqual("test", s.Name);
            Assert.AreEqual("Value", s.Value);
            Console.WriteLine(s.ToStringPressed());
            Assert.AreEqual("\"test\":\"Value\"", s.ToStringPressed());
        }
Example #29
0
        private void btnImport_Click(object sender, EventArgs e)
        {
            try
            {
                string keyFile = SaveLoadDialogs.LoadFile(
                    "鍵ファイルを選択してください",
                    "鍵:unreal-remo-key",
                    Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                    "default.unreal-remo-key"
                    );

                if (keyFile != null)
                {
                    XNode root = XNode.load(keyFile);

                    string ident = root.get("Ident").value;
                    string key   = root.get("Key").value;
                    string hash  = root.get("Hash").value;

                    if (ident != JString.toJString(ident, false, false, false, false))
                    {
                        throw new FailedOperation("鍵ファイルが壊れています。(Ident format)");
                    }

                    if (ident.Length < 1 || 100 < ident.Length)                     // HACK: 上限適当
                    {
                        throw new FailedOperation("鍵ファイルが壊れています。(Ident length)");
                    }

                    if (StringTools.hex(key).Length != 64)
                    {
                        throw new FailedOperation("鍵ファイルが壊れています。(Key length)");
                    }

                    if (hash != Ground.KeyData.getHash(key))
                    {
                        throw new FailedOperation("鍵ファイルが壊れています。(Hash)");
                    }

                    txtIdent.Text = ident;
                    txtRaw.Text   = key;
                    txtHash.Text  = hash;

                    throw new Completed("鍵をインポートしました。");
                }
            }
            catch (Exception ex)
            {
                FailedOperation.caught(ex);
            }
        }
        // =================================================================================
        // Software Update Verification Support Functions.
        // ---------------------------------------------------------------------------------
        // Returns the version string of the latest available release.
        static Version GetLatestReleaseId(out string downloadUrl, float waitTime = 2f)
        {
            downloadUrl = null;
            var url      = URL_VersionFile;
            var download = iCS_WebUtils.WebRequest(url, waitTime);

            if (!String.IsNullOrEmpty(download.error))
            {
                return(null);
            }
#if DEBUG_INFO
            Debug.Log(download.text);
#endif
            JNumber jMajor  = null;
            JNumber jMinor  = null;
            JNumber jBugFix = null;
            try {
                JObject rootObject    = JSON.JSON.GetRootObject(download.text);
                JObject latestVersion = rootObject.GetValueFor("iCanScript") as JObject;
                if (!latestVersion.isNull)
                {
                    jMajor  = latestVersion.GetValueFor("major") as JNumber;
                    jMinor  = latestVersion.GetValueFor("minor") as JNumber;
                    jBugFix = latestVersion.GetValueFor("bugFix") as JNumber;
                    JString jDownloadUrl = rootObject.GetValueFor("downloadUrl") as JString;
                    if (jDownloadUrl != null)
                    {
                        downloadUrl = jDownloadUrl.value;
                    }
#if DEBUG_INFO
                    else
                    {
                        Debug.Log("iCanScript: Unable to determine the download URL");
                        Debug.Log("iCanScript: JSON root object is: " + rootObject.Encode());
                    }
#endif
                }
            }
#if DEBUG_INFO
            catch (System.Exception e) {
                Debug.LogWarning("iCanScript: JSON exception: " + e.Message);
            }
#else
            catch (System.Exception) {}
#endif
            if (jMajor == null || jMinor == null || jBugFix == null)
            {
                return(null);
            }
            return(new Version((int)jMajor.value, (int)jMinor.value, (int)jBugFix.value));
        }
Example #31
0
        /// <summary>
        /// Parse a JSON string to a doufu json object
        /// </summary>
        /// <param name="sJSON">JSON string</param>
        /// <param name="bAllowNonStandardVariableName">True to allow non-standard variable name, for example {"foo\0\nfoo":"str"} is allowed.
        /// Otherwise incorrect format exception will be thrown.</param>
        /// <returns>Return a doufu json object</returns>
        public static JSONObject Parse(string sJSON, bool bAllowNonStandardVariableName)
        {
            sJSON = sJSON.Trim();

            // indicate current json is array format
            bool isArray = false;

            if (sJSON[0] == BRACKET_START)
            {
                if (sJSON[sJSON.Length - 1] != BRACKET_END)
                {
                    throw new Exception("Incorrect format, json starts with { but not ends with }");
                }
            }
            else if (sJSON[0] == BRACE_START)
            {
                if (sJSON[sJSON.Length - 1] != BRACE_END)
                {
                    throw new Exception("Incorrect format, json starts with [ but not ends with ]");
                }
                isArray = true;
            }
            else
            {
                throw new Exception("Incorrect format, json should starts with { or [");
            }

            // remove brackets
            sJSON = sJSON.Substring(1, sJSON.Length - 2);

            sJSON = sJSON.Trim();

            JObject jsonRet = new JObject();
            JArray jsonArrRet = new JArray();
            Regex reVariableName = new Regex(@"^[""|'][a-zA-Z$]+[a-zA-Z0-9_\$]*[""|']$", RegexOptions.None);

            if (bAllowNonStandardVariableName)
            {
                reVariableName = new Regex(@"^[""|'].*[""|']$", RegexOptions.None);
            }

            Regex reIsLetter = new Regex(@"^[a-zA-Z]*$", RegexOptions.None);
            Regex reIsNumberChar = new Regex(@"^-?[0-9]*$", RegexOptions.None);
            Regex reIsNumber = new Regex(@"^-?[0-9]+$", RegexOptions.None);

            string sVariableName = string.Empty;
            JSONObject oVariableValue;

            ParsingStatus iStatus = ParsingStatus.Unstarted;

            Collection<char> cStartSymbs = new Collection<char>();
            Collection<char> cEndSymbs = new Collection<char>();

            if (isArray)
            {
                iStatus = ParsingStatus.ExpectVariableValue |
                    ParsingStatus.ExpectStartBracket |
                    ParsingStatus.ExpectStartBrace;
            }
            else
            {
                iStatus = ParsingStatus.ExpectVariableName;
            }

            // indicate whether the last loop exited with error.
            // if there were error, the iConditionMet would be 0
            int iConditionMet = 1;

            for (int i = 0; i < sJSON.Length; )
            {
                if (iConditionMet <= 0)
                {
                    throw new Exception("Incorrect format: Expected " + iStatus.ToString() + " position: " + i.ToString());
                }
                else
                {
                    iConditionMet = 0;
                }

                if (iStatus == (iStatus | ParsingStatus.ExpectStartBracket))
                {
                    // is start symbol?
                    if (BRACKET_START == sJSON[i])
                    {
                        StringBuilder sInnerJSON = new StringBuilder();
                        int iBracketCounter = 0;
                        int j;
                        for (j = i; j < sJSON.Length; j++)
                        {

                            sInnerJSON.Append(sJSON[j]);

                            if (sJSON[j] == BRACKET_START)
                            {
                                iBracketCounter++;
                            }
                            else if (sJSON[j] == BRACKET_END)
                            {
                                iBracketCounter--;
                            }

                            if (iBracketCounter == 0)
                            {
                                break;
                            }

                        }

                        oVariableValue = Parse(sInnerJSON.ToString());

                        // add value
                        if (isArray)
                        {
                            jsonArrRet.Value.Add(oVariableValue);
                        }
                        else
                        {
                            jsonRet.Items.Add(sVariableName, oVariableValue);
                        }

                        i = ++j;

                        iStatus = ParsingStatus.ExpectCommas |
                            ParsingStatus.ExpectEOS |
                            ParsingStatus.ExpectBlank;
                        iConditionMet++;
                        continue;
                    }
                }

                if (iStatus == (iStatus | ParsingStatus.ExpectEndBracket))
                {

                }
                if (iStatus == (iStatus | ParsingStatus.ExpectStartBrace))
                {
                    // check if it is "["
                    if (BRACE_START == sJSON[i])
                    {

                        StringBuilder sInnerJSON = new StringBuilder();
                        int iBracketCounter = 0;
                        int j;
                        for (j = i; j < sJSON.Length; j++)
                        {

                            sInnerJSON.Append(sJSON[j]);

                            if (sJSON[j] == BRACE_START)
                            {
                                iBracketCounter++;
                            }
                            else if (sJSON[j] == BRACE_END)
                            {
                                iBracketCounter--;
                            }

                            if (iBracketCounter == 0)
                            {
                                break;
                            }

                        }

                        oVariableValue = Parse(sInnerJSON.ToString());

                        // add value
                        if (isArray)
                        {
                            jsonArrRet.Value.Add(oVariableValue);
                        }
                        else
                        {
                            jsonRet.Items.Add(sVariableName, oVariableValue);
                        }

                        i = ++j;

                        iStatus = ParsingStatus.ExpectCommas |
                            ParsingStatus.ExpectEOS |
                            ParsingStatus.ExpectBlank;
                        iConditionMet++;
                        continue;
                    }
                }
                if (iStatus == (iStatus | ParsingStatus.ExpectEndBrace))
                {
                }
                if (iStatus == (iStatus | ParsingStatus.ExpectVariableName))
                {

                    StringBuilder sName = new StringBuilder();
                    string sActualName;
                    bool bBroke = false;
                    int j;
                    for (j = i; j < sJSON.Length; j++)
                    {
                        if (sJSON[j] == NAME_VALUE_SEPARATOR)
                        {
                            bBroke = true;
                            break;
                        }

                        sName.Append(sJSON[j]);
                    }

                    sActualName = sName.ToString();
                    sActualName = sActualName.Trim();

                    if (reVariableName.IsMatch(sActualName.ToString()) && bBroke == true)
                    {
                        // TODO: string escape
                        sActualName = sActualName.Substring(1, sActualName.Length - 2);
                        sVariableName = sActualName;
                        i = ++j;
                        iStatus = ParsingStatus.ExpectVariableValue |
                            ParsingStatus.ExpectStartBrace |
                            ParsingStatus.ExpectStartBracket |
                            ParsingStatus.ExpectBlank;
                        iConditionMet++;
                        continue;
                    }
                }
                if (iStatus == (iStatus | ParsingStatus.ExpectVariableValue))
                {

                    if (sJSON[i] == '"' || sJSON[i] == '\'')
                    {
                        StringBuilder sValue = new StringBuilder();
                        bool bBroke = false;
                        int j;
                        for (j = i + 1; j < sJSON.Length; j++)
                        {
                            if (sJSON[j] == sJSON[i] && sJSON[j - 1] != '\\')
                            {
                                bBroke = true;
                                break;
                            }

                            // process escaped unicode
                            if (sJSON[j] == '\\')
                            {
                                if (j + 5 < sJSON.Length && sJSON[j+1] == 'u')
                                {
                                    string hex = sJSON.Substring(j + 2, 4);
                                    sValue.Append((char)Int16.Parse(hex, System.Globalization.NumberStyles.HexNumber));
                                    j += 5;
                                    continue;
                                }
                            }

                            sValue.Append(sJSON[j]);
                        }

                        if (bBroke == true)
                        {

                            string sFinalValue = sValue.ToString();
                            sFinalValue = sFinalValue.Replace("\\\"", "\"");
                            sFinalValue = sFinalValue.Replace("\\\'", "\'");
                            oVariableValue = new JString(sFinalValue);

                            // add value
                            if (isArray)
                            {
                                jsonArrRet.Value.Add(oVariableValue);
                            }
                            else
                            {
                                jsonRet.Items.Add(sVariableName, oVariableValue);
                            }

                            i = j + 1;

                            iStatus = ParsingStatus.ExpectEOS |
                                ParsingStatus.ExpectCommas |
                                ParsingStatus.ExpectBlank;

                            iConditionMet++;
                            continue;
                        }
                    }
                    else if (reIsLetter.IsMatch(sJSON[i].ToString()))
                    {
                        StringBuilder sBool = new StringBuilder();
                        bool bFound = false;
                        int j;

                        for (j = 0; j < 5; j++)
                        {
                            sBool.Append(sJSON[i + j]);

                            if (j == 3 && sBool.ToString() == "true")
                            {
                                bFound = true;
                                break;
                            }
                            else if (j == 4 && sBool.ToString() == "false")
                            {
                                bFound = true;
                                break;
                            }
                        }

                        if (bFound == true)
                        {

                            oVariableValue = new JBoolean(bool.Parse(sBool.ToString()));

                            // add value
                            if (isArray)
                            {
                                jsonArrRet.Value.Add(oVariableValue);
                            }
                            else
                            {
                                jsonRet.Items.Add(sVariableName, oVariableValue);
                            }

                            i += j + 1;

                            iStatus = ParsingStatus.ExpectEOS |
                                ParsingStatus.ExpectCommas |
                                ParsingStatus.ExpectBlank;

                            iConditionMet++;
                            continue;
                        }

                    }
                    else if (reIsNumberChar.IsMatch(sJSON[i].ToString()))
                    {
                        // check if negative number
                        if (sJSON[i].ToString() == "-" && !reIsNumber.IsMatch(sJSON[i].ToString() + sJSON[i + 1].ToString()))
                        {
                            break;
                        }
                        StringBuilder sNumber = new StringBuilder();
                        int j;

                        for (j = i; j < sJSON.Length; j++)
                        {
                            if (reIsNumberChar.IsMatch(sJSON[j].ToString()))
                            {
                                sNumber.Append(sJSON[j]);
                            }
                            else
                            {
                                if (sJSON[j] != '.')
                                {
                                    break;
                                }
                                sNumber.Append(sJSON[j]);
                            }
                        }

                        if (j == sJSON.Length || sJSON[j] == ',' || sJSON[j] == ' ')
                        {
                            oVariableValue = new JNumber(Int32.Parse(sNumber.ToString()));

                            // add value
                            if (isArray)
                            {
                                jsonArrRet.Value.Add(oVariableValue);
                            }
                            else
                            {
                                jsonRet.Items.Add(sVariableName, oVariableValue);
                            }

                            i = j;

                            iStatus = ParsingStatus.ExpectEOS |
                                ParsingStatus.ExpectCommas |
                                ParsingStatus.ExpectBlank;

                            iConditionMet++;
                            continue;
                        }
                    }
                }

                if (iStatus == (iStatus | ParsingStatus.ExpectBlank))
                {
                    if (i < sJSON.Length && sJSON[i] == ' ')
                    {
                        i++;
                        iConditionMet++;
                        continue;
                    }
                }

                if (iStatus == (iStatus | ParsingStatus.ExpectCommas))
                {

                    if (i < sJSON.Length && sJSON[i] == ',')
                    {
                        i++;
                        if (isArray)
                        {
                            iStatus = ParsingStatus.ExpectVariableValue |
                                ParsingStatus.ExpectStartBracket |
                                ParsingStatus.ExpectStartBrace |
                                ParsingStatus.ExpectBlank;
                        }
                        else
                        {
                            iStatus = ParsingStatus.ExpectVariableName |
                                ParsingStatus.ExpectBlank;
                        }
                        iConditionMet++;
                        continue;
                    }
                }

                if (iStatus == (iStatus | ParsingStatus.ExpectEOS))
                {
                    if (i == sJSON.Length)
                    {
                        iConditionMet++;
                        continue;
                    }
                }

            }

            if (isArray)
            {
                return jsonArrRet;
            }
            else
            {
                return jsonRet;
            }
        }
Example #32
0
        static void Main(string[] args)
        {
            if (false)
            {
                /////////////////////////
                // Stringifier Test
                /////////////////////////

                // implicity conversion

                JArray jArrTest = new JArray();
                jArrTest.Value.Add("jArrTest primitive string");

                Console.WriteLine(jArrTest.ToJSON());

                JString jStrTest = null;
                jStrTest = "primitive string test";

                Console.WriteLine(jStrTest.ToJSON());

                // Null tests
                JString jstr = new JString(null);
                Console.WriteLine(jstr.ToJSON());

                // string with a backward slash
                JString jstrslash = new JString("\\\\n\n");
                JObject jobjslash = new JObject();
                jobjslash.Items.Add("\r\n\\\n", jstrslash);
                Console.WriteLine(jobjslash.ToJSON());

                // stringify a jstring that contain break line
                JString breakstr = new JString("abc \n cba");
                Console.WriteLine(breakstr.ToJSON());

                JObject jNullObj = new JObject();
                jNullObj["test1"] = new JNumber(23);
                jNullObj["test2"] = null;
                jNullObj["test3"] = new JString(null);
                jNullObj["test4"] = new JArray();
                ((JArray)jNullObj["test4"]).Value.Add(new JNumber(234));
                ((JArray)jNullObj["test4"]).Value.Add(null);
                ((JArray)jNullObj["test4"]).Value.Add(new JString("sdf"));
                Console.WriteLine(jNullObj.ToJSON());

                // Array tests
                JObject testObject = new JObject();
                testObject.Items.Add("key1", new JBoolean(false));
                testObject.Items.Add("key2", new JNumber(333));
                JArray testArray = new JArray(new JSONObject[] {
                new JBoolean(false),
                new JBoolean(true),
                new JNumber(20),
                new JString("test"),
                testObject,
                new JNumber(0)
            });
                Console.WriteLine(testArray.ToJSON());

                // test JArray.this[int index]
                Console.WriteLine(((JNumber)testArray[2]).Value.ToString());
                Console.WriteLine(((JNumber)testArray[2]).Value = 556);
                Console.WriteLine(testArray.ToJSON());

                // test JArray.this[string key]
                testArray["alimali"] = new JString("alimali");
                Console.WriteLine(testArray["alimali"].ToJSON());
                Console.WriteLine(testArray.ToJSON());

                // test implicit convert from int to JNumber
                Console.WriteLine((testArray[2] = (JNumber)234).ToJSON());
                Console.WriteLine(testArray.ToJSON());

                // test implicit convert from string to JString
                Console.WriteLine((testArray[2] = (JString)"jstring converted!").ToJSON());
                Console.WriteLine(testArray.ToJSON());
            }
            else
            {
                /////////////////////////
                // Parser Test
                /////////////////////////

                // unicode tests

                JArray unicode1 = (JArray)Helpers.Parse(@"['HR\u9762\u8bd5',3,3,4]");

                // array tests

                JArray array = (JArray)Helpers.Parse(@"[1,3,3,4]");

                JObject array2 = (JObject)Helpers.Parse(@"{'Processes':['20ed6436-5b44-47f8-8642-1184811d4a99']}");

                JObject array3 = (JObject)Helpers.Parse(@"{'Processes':['20ed6436-5b44-47f8-8642-1184811d4a99','20ed6436-5b44-47f8-8642-1184811d4a99']}");

                JObject array4 = (JObject)Helpers.Parse(@"{'name': 'asfdasf', 'items': [{'name': 'HR\u9762\u8bd5'},{'name': '\u4f53\u68c0'},{'name': '\u5165\u804c'},{'name': '\u5ba2\u6237\u9762\u8bd5'},{'name': '\u7b7e\u7f72OFFER'},{'name': '\u90e8\u95e8\u9762\u8bd5'}]}");

                // positive tests

                JObject p_number1 = (JObject)Helpers.Parse(@"{""test"":23423}");
                JObject p_number2_blank = (JObject)Helpers.Parse(@"  {  ""test""   :  23423  }   ");
                JObject p_number3 = (JObject)Helpers.Parse(@"{""test"":-23}"); // negative number

                JObject p_string1 = (JObject)Helpers.Parse(@"{""test"":""23423""}");
                JObject p_string2 = (JObject)Helpers.Parse(@"{""test"":'23423'}");
                JObject p_string3 = (JObject)Helpers.Parse(@"{""test"":'23423\0'}");
                JObject p_string4 = (JObject)Helpers.Parse(@"{""test"":'23""423\0'}");
                JObject p_string5 = (JObject)Helpers.Parse(@"{""test"":""23'423\0""}");
                JObject p_string6 = (JObject)Helpers.Parse(@"{""test"":""23\""423\0""}");
                JObject p_string7 = (JObject)Helpers.Parse(@"{""test"":'23\""423\0'}");

                JObject p_bool1 = (JObject)Helpers.Parse(@"{""test"":false}");
                JObject p_bool2 = (JObject)Helpers.Parse(@"{""test"":true}");

                // variable name tests
                JObject p_variable1 = (JObject)Helpers.Parse(@"{""test"":true}");
                JObject p_variable2 = (JObject)Helpers.Parse(@"{'test':false}");

                // TODO: multiple object
                JObject p_multipleObject1 = (JObject)Helpers.Parse(@"{""test"":23423,""test2"":234}");
                JObject p_multipleObject2 = (JObject)Helpers.Parse(@"{""X"":350,""Y"":500,""Z"":9}");

                // TODO: mixed types
                JObject p_mixTypes1 = (JObject)Helpers.Parse(@"{""test"":23423,""test2"":""sdf"",""test3"":false,""test4"":234}");

                // TODO: dupilcated variable names

                // TODO: nested
                JObject p_nested1 = (JObject)Helpers.Parse(@"{""test"":{""test2"":234,""test3"":""sdf""}}");
                JObject p_nested2 = (JObject)Helpers.Parse(@"  {  ""test"" :   {    ""test2""  :   {  ""test4""  :  false  }   , ""test3""  :  ""sdf""  }   }     ");

                // TODO: string escape test

                // Expected pass
                JObject p_variableNameEscape_1 = (JObject)Helpers.Parse(@"  {  ""t\nest""   :  23423  }   ", true);
                JObject p_variableNameEscape_2 = (JObject)Helpers.Parse(@"  {  ""t\0est""   :  23423  }   ", true);
                JObject p_variableNameEscape_3 = (JObject)Helpers.Parse(@"  {  ""t\0est""   :  ""sdfsdf\0sdfsdf\""df""  }   ", true);

                // Expected error
                JObject n_variableNameEscape_1 = (JObject)Helpers.Parse(@"  {  ""t\nest""   :  23423  }   ");
                JObject n_variableNameEscape_2 = (JObject)Helpers.Parse(@"  {  ""t\0est""   :  23423  }   ", false);

                // negative tests

                JObject n = (JObject)Helpers.Parse(@"{""test"":23423a}");
                JObject n2 = (JObject)Helpers.Parse(@"{""test"":false1}");
                JObject n3 = (JObject)Helpers.Parse(@"{""test':false1}");
            }
        }