Example #1
0
        public void TestAlias()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";
            js.Options.TagMode = TagMode.Aliases;

            var v = new SampleTree { Value = 9 };
            var result = js.ToString(v);
            Assert.AreEqual("{\"a\":9,\"b\":null}", result);

            js.Options.TagMode = TagMode.Names;
            var result1 = js.ToString(v);
            Assert.AreEqual("{\"Value\":9,\"Children\":null}", result1);

            js.Options.TagMode = TagMode.Ids;
            var result2 = js.ToString(v);
            Assert.AreEqual("{\"AAAB\":9,\"AAAC\":null}", result2);

            var prev = IdGenerator.GetNextId();
            for (int i = 0; i < 2 * 52 - 5; ++i) {
                var next = IdGenerator.GetNextId();
                Assert.IsTrue(String.CompareOrdinal(prev, next) < 0);
                prev = next;
            }
            Assert.AreEqual("AABz", IdGenerator.GetNextId());

            var jd = new JsonDeserializer();
            jd.Options.TagMode = TagMode.Aliases;
            var w = new SampleTree();
            jd.FromString(w, result);
            Assert.AreEqual(9, w.Value);
            Assert.AreEqual(null, w.Children);
        }
Example #2
0
File: Speed.cs Project: klenin/Yuzu
        public void TestJsonLongListInt()
        {
            var list1 = new SampleMatrix { M = new List<List<int>>() };
            for (int i = 0; i < 300; ++i) {
                list1.M.Add(new List<int>());
                for (int j = 0; j < 400; ++j)
                    list1.M[i].Add(i * j * 97);
            }

            var js = new JsonSerializer();
            var result1 = js.ToString(list1);
            Assert.IsTrue(result1 != "");

            var list2 = new SampleMatrix();
            var jd = new JsonDeserializer();
            jd.FromString(list2, result1);
            Assert.AreEqual(list1.M.Count, list2.M.Count);
            for (int i = 0; i < list1.M.Count; ++i) {
                for (int j = 0; j < list1.M[i].Count; ++j)
                    Assert.AreEqual(list1.M[i][j], list2.M[i][j]);
            }

            var jdg = new SampleMatrix_JsonDeserializer();
            var list3 = (SampleMatrix)jdg.FromString(result1);
            Assert.AreEqual(list1.M.Count, list3.M.Count);
        }
Example #3
0
        public static void WriteIReadOnlyCollectionTOfArray()
        {
            IReadOnlyCollection <int[]> input = new List <int[]>
            {
                new int[] { 1, 2 },
                new int[] { 3, 4 }
            };

            string json = JsonSerializer.ToString(input);

            Assert.Equal("[[1,2],[3,4]]", json);
        }
Example #4
0
        public static void WriteIImmutableStackTOfArray()
        {
            IImmutableStack <int[]> input = ImmutableStack.CreateRange(new List <int[]>
            {
                new int[] { 1, 2 },
                new int[] { 3, 4 }
            });

            string json = JsonSerializer.ToString(input);

            Assert.Equal("[[3,4],[1,2]]", json);
        }
Example #5
0
        public async Task <UserInfo> Login(LoginParameters loginParameters)
        {
            var stringContent = new StringContent(JsonSerializer.ToString(loginParameters), Encoding.UTF8, "application/json");
            var result        = await _httpClient.PostAsync("api/Authorize/Login", stringContent);

            if (result.StatusCode == System.Net.HttpStatusCode.BadRequest)
            {
                throw new Exception(await result.Content.ReadAsStringAsync());
            }
            result.EnsureSuccessStatusCode();
            return(JsonSerializer.Parse <UserInfo>(await result.Content.ReadAsStringAsync()));
        }
Example #6
0
        public static void NullObjectOutput()
        {
            {
                string output = JsonSerializer.ToString <string>(null);
                Assert.Equal("null", output);
            }

            {
                string output = JsonSerializer.ToString <string>(null, null);
                Assert.Equal("null", output);
            }
        }
        public static void NoGetter()
        {
            var objNoSetter = new ClassWithNoSetter();

            string json = JsonSerializer.ToString(objNoSetter);

            Assert.Equal(@"{""MyString"":""DefaultValue""}", json);

            ClassWithNoGetter objNoGetter = JsonSerializer.Parse <ClassWithNoGetter>(json);

            Assert.Equal("DefaultValue", objNoGetter.GetMyString());
        }
Example #8
0
        public static void CamelCaseSerialize()
        {
            var options = new JsonSerializerOptions();

            options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;

            SimpleTestClass obj  = JsonSerializer.Parse <SimpleTestClass>(@"{}", options);
            string          json = JsonSerializer.ToString(obj, options);

            Assert.Contains(@"""myInt16"":0", json);
            Assert.Contains(@"""myInt32"":0", json);
        }
Example #9
0
        public static void JsonNameConflictOnCaseInsensitiveFail()
        {
            string json = @"{""myInt"":1,""MyInt"":2}";

            {
                var options = new JsonSerializerOptions();
                options.PropertyNameCaseInsensitive = true;

                Assert.Throws <InvalidOperationException>(() => JsonSerializer.Parse <IntPropertyNamesDifferentByCaseOnly_TestClass>(json, options));
                Assert.Throws <InvalidOperationException>(() => JsonSerializer.ToString(new IntPropertyNamesDifferentByCaseOnly_TestClass(), options));
            }
        }
Example #10
0
        public static void JsonNameAttributeDuplicateDesignTimeFail()
        {
            {
                var options = new JsonSerializerOptions();
                Assert.Throws <InvalidOperationException>(() => JsonSerializer.Parse <DuplicatePropertyNameDesignTime_TestClass>("{}", options));
            }

            {
                var options = new JsonSerializerOptions();
                Assert.Throws <InvalidOperationException>(() => JsonSerializer.ToString(new DuplicatePropertyNameDesignTime_TestClass(), options));
            }
        }
Example #11
0
        public static void WriteListOfArray()
        {
            var input = new List <int[]>
            {
                new int[] { 1, 2 },
                new int[] { 3, 4 }
            };

            string json = JsonSerializer.ToString(input);

            Assert.Equal("[[1,2],[3,4]]", json);
        }
Example #12
0
        public static void DictionaryOfList()
        {
            const string JsonString = @"{""Key1"":[1,2],""Key2"":[3,4]}";

            {
                IDictionary <string, List <int> > obj = JsonSerializer.Parse <IDictionary <string, List <int> > >(JsonString);

                Assert.Equal(2, obj.Count);
                Assert.Equal(2, obj["Key1"].Count);
                Assert.Equal(1, obj["Key1"][0]);
                Assert.Equal(2, obj["Key1"][1]);
                Assert.Equal(2, obj["Key2"].Count);
                Assert.Equal(3, obj["Key2"][0]);
                Assert.Equal(4, obj["Key2"][1]);

                string json = JsonSerializer.ToString(obj);
                Assert.Equal(JsonString, json);
            }

            {
                ImmutableDictionary <string, List <int> > obj = JsonSerializer.Parse <ImmutableDictionary <string, List <int> > >(JsonString);

                Assert.Equal(2, obj.Count);
                Assert.Equal(2, obj["Key1"].Count);
                Assert.Equal(1, obj["Key1"][0]);
                Assert.Equal(2, obj["Key1"][1]);
                Assert.Equal(2, obj["Key2"].Count);
                Assert.Equal(3, obj["Key2"][0]);
                Assert.Equal(4, obj["Key2"][1]);

                string       json = JsonSerializer.ToString(obj);
                const string ReorderedJsonString = @"{""Key2"":[3,4],""Key1"":[1,2]}";
                Assert.True(JsonString == json || ReorderedJsonString == json);
            }

            {
                IImmutableDictionary <string, List <int> > obj = JsonSerializer.Parse <IImmutableDictionary <string, List <int> > >(JsonString);

                Assert.Equal(2, obj.Count);
                Assert.Equal(2, obj["Key1"].Count);
                Assert.Equal(1, obj["Key1"][0]);
                Assert.Equal(2, obj["Key1"][1]);
                Assert.Equal(2, obj["Key2"].Count);
                Assert.Equal(3, obj["Key2"][0]);
                Assert.Equal(4, obj["Key2"][1]);


                string       json = JsonSerializer.ToString(obj);
                const string ReorderedJsonString = @"{""Key2"":[3,4],""Key1"":[1,2]}";
                Assert.True(JsonString == json || ReorderedJsonString == json);
            }
        }
Example #13
0
        public static void WriteIImmutableSetTOfArray()
        {
            IImmutableSet <int[]> input = ImmutableHashSet.CreateRange(new List <int[]>
            {
                new int[] { 1, 2 },
                new int[] { 3, 4 }
            });

            string json = JsonSerializer.ToString(input);

            Assert.True(json.Contains("[1,2]"));
            Assert.True(json.Contains("[3,4]"));
        }
Example #14
0
        public void JsonSerializer_ReadSimple()
        {
            string output;
            Simple o;

            output = JsonSerializer.ToString(new Simple(10, 123.456, "Hello World!", true));
            o      = (Simple)JsonSerializer.Read(output, typeof(Simple));

            Assert.AreEqual(10, o.Int);
            Assert.AreEqual(123.456, o.Double);
            Assert.AreEqual("Hello World!", o.String);
            Assert.IsTrue(o.Bool);
        }
        public static void WriteHashSetTOfArray()
        {
            HashSet <int[]> input = new HashSet <int[]>(new List <int[]>
            {
                new int[] { 1, 2 },
                new int[] { 3, 4 }
            });

            string json = JsonSerializer.ToString(input);

            Assert.True(json.Contains("[1,2]"));
            Assert.True(json.Contains("[3,4]"));
        }
Example #16
0
        public void TestJsonLongListLong()
        {
            var list1 = new List <long>();

            for (int i = 0; i < 100000; ++i)
            {
                list1.Add(i * 1973457);
            }
            var js      = new JsonSerializer();
            var result1 = js.ToString(list1);

            Assert.IsTrue(result1 != "");
        }
Example #17
0
        public void ShouldSerializeAndParseSample()
        {
            var jsonSerializerOptions = new JsonSerializerOptions();
            var person = new Person {
                FirstName = "Steve", LastName = "Cramer", BirthDay = new DateTime(1967, 09, 27)
            };
            string json   = JsonSerializer.ToString(person, jsonSerializerOptions);
            Person parsed = JsonSerializer.Parse <Person>(json, jsonSerializerOptions);

            parsed.BirthDay.ShouldBe(person.BirthDay);
            parsed.FirstName.ShouldBe(person.FirstName);
            parsed.LastName.ShouldBe(person.LastName);
        }
        public static void CustomAttributeOnProperty()
        {
            const string json = @"{""Point1"":""1,2""}";

            ClassWithJsonConverterAttribute obj = JsonSerializer.Parse <ClassWithJsonConverterAttribute>(json);

            Assert.Equal(1, obj.Point1.X);
            Assert.Equal(2, obj.Point1.Y);

            string jsonSerialized = JsonSerializer.ToString(obj);

            Assert.Equal(json, jsonSerialized);
        }
        public static void CustomAttributeOnType()
        {
            const string json = @"""1,2""";

            AttributedPoint point = JsonSerializer.Parse <AttributedPoint>(json);

            Assert.Equal(1, point.X);
            Assert.Equal(2, point.Y);

            string jsonSerialized = JsonSerializer.ToString(point);

            Assert.Equal(json, jsonSerialized);
        }
        public static void CustomAttributeExtraInformation()
        {
            const string json = @"{""Point1"":""1,2""}";

            ClassWithPointConverterAttribute obj = JsonSerializer.Parse <ClassWithPointConverterAttribute>(json);

            Assert.Equal(11, obj.Point1.X);
            Assert.Equal(12, obj.Point1.Y);

            string jsonSerialized = JsonSerializer.ToString(obj);

            Assert.Equal(json, jsonSerialized);
        }
Example #21
0
        // TODO: 2) Serialize the "account" object to a "pretty-printed" JSON string and return it.
        private static string SerializePrettyPrint(Account account)
        {
            // 2a) Find the serializer options and the flag that would let you write indented
            var options = new JsonSerializerOptions()
            {
                WriteIndented = true
            };

            // 2b) Make sure to pass the options to the ToString method
            string jsonString = JsonSerializer.ToString <Account>(account, options);

            return(jsonString);
        }
        public static void NoSetter()
        {
            var obj = new ClassWithNoSetter();

            string json = JsonSerializer.ToString(obj);

            Assert.Contains(@"""MyString"":""DefaultValue""", json);
            Assert.Contains(@"""MyInts"":[1,2]", json);

            obj = JsonSerializer.Parse <ClassWithNoSetter>(@"{""MyString"":""IgnoreMe"",""MyInts"":[0]}");
            Assert.Equal("DefaultValue", obj.MyString);
            Assert.Equal(2, obj.MyInts.Length);
        }
Example #23
0
        public static void OverrideWriteOnAttribute()
        {
            JsonSerializerOptions      options = new JsonSerializerOptions();
            JsonPropertyValueAttribute attr    = new JsonPropertyValueAttribute();

            attr.IgnoreNullValueOnWrite = true;
            options.AddAttribute(typeof(TestClassWithNull), attr);

            var    input = new TestClassWithNull();
            string json  = JsonSerializer.ToString(input, options);

            Assert.Equal(@"{}", json);
        }
Example #24
0
        public void SerializeList()
        {
            ImmutableList <string> data = ImmutableList.CreateRange(new List <string>
            {
                "One",
                "II",
                "3"
            });

            string json = JsonSerializer.ToString(data);

            Assert.Equal(@"[""One"",""II"",""3""]", json);
        }
        public static void CustomAttributeOnTypeAndProperty()
        {
            const string json = @"{""Point1"":""1,2""}";

            ClassWithJsonConverterAttributeOverride point = JsonSerializer.Parse <ClassWithJsonConverterAttributeOverride>(json);

            // The property attribute overides the type attribute.
            Assert.Equal(101, point.Point1.X);
            Assert.Equal(102, point.Point1.Y);

            string jsonSerialized = JsonSerializer.ToString(point);

            Assert.Equal(json, jsonSerialized);
        }
Example #26
0
        public static void NullReferences()
        {
            var obj = new ObjectWithObjectProperties();

            obj.Address          = null;
            obj.Array            = null;
            obj.List             = null;
            obj.NullableInt      = null;
            obj.NullableIntArray = null;

            string json = JsonSerializer.ToString(obj);

            Assert.Equal(ObjectWithObjectProperties.ExpectedJsonAllNulls, json);
        }
Example #27
0
        public static void DictionaryOfObject()
        {
            Dictionary <string, object> obj = JsonSerializer.Parse <Dictionary <string, object> >(@"{""Key1"":1}");

            Assert.Equal(1, obj.Count);
            JsonElement element = (JsonElement)obj["Key1"];

            Assert.Equal(JsonValueType.Number, element.Type);
            Assert.Equal(1, element.GetInt32());

            string json = JsonSerializer.ToString(obj);

            Assert.Equal(@"{""Key1"":1}", json);
        }
Example #28
0
        public void ConvertEnumUsingAttributes()
        {
            Week week = new Week {
                WorkStart = DayOfWeek.Monday, WorkEnd = DayOfWeek.Friday, WeekEnd = DayOfWeek.Saturday
            };
            string json = JsonSerializer.ToString(week);

            Assert.Equal(@"{""WorkStart"":""Monday"",""WorkEnd"":5,""WeekEnd"":""saturday""}", json);

            week = JsonSerializer.Parse <Week>(json);
            Assert.Equal(DayOfWeek.Monday, week.WorkStart);
            Assert.Equal(DayOfWeek.Friday, week.WorkEnd);
            Assert.Equal(DayOfWeek.Saturday, week.WeekEnd);
        }
Example #29
0
        public void TestJsonToBinarySimple()
        {
            var bs = new BinarySerializer();
            var bd = new BinaryDeserializer();
            var js = new JsonSerializer();
            js.JsonOptions.FieldSeparator = "";
            js.JsonOptions.Indent = "";
            js.JsonOptions.SaveRootClass = true;
            var jd = new JsonDeserializer();

            var data1 = "{\"class\":\"YuzuTest.Sample1, YuzuTest\",\"X\":98,\"Y\":\"\"}";
            var result1 = js.ToString(bd.FromBytes(bs.ToBytes(jd.FromString(data1))));
            Assert.AreEqual(data1, result1);
        }
        public static void WriteArrayOfStackT()
        {
            Stack <int>[] input = new Stack <int> [2];
            input[0] = new Stack <int>(new List <int> {
                1, 2
            });
            input[1] = new Stack <int>(new List <int> {
                3, 4
            });

            string json = JsonSerializer.ToString(input);

            Assert.Equal("[[2,1],[4,3]]", json);
        }
        public static void WriteArrayOfSortedSetT()
        {
            SortedSet <int>[] input = new SortedSet <int> [2];
            input[0] = new SortedSet <int>(new List <int> {
                1, 2
            });
            input[1] = new SortedSet <int>(new List <int> {
                3, 4
            });

            string json = JsonSerializer.ToString(input);

            Assert.Equal("[[1,2],[3,4]]", json);
        }
Example #32
0
        public void SerializeDateTime()
        {
            DateTime d = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc);
            string   result;

            result = JsonSerializer.ToString(d);
            Assert.Equal(@"""2000-12-15T22:11:03.055Z""", result);

            Assert.Equal(d, JsonSerializer.Parse <DateTime>(result));

            d      = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Local);
            result = JsonSerializer.ToString(d);
            Assert.Equal(@"""2000-12-15T22:11:03.055" + GetUtcOffsetText(d) + @"""", result);
        }
Example #33
0
        public static void ReadSimpleTestClassWithSimpleTestStruct()
        {
            SimpleTestClass testObject = new SimpleTestClass();

            testObject.Initialize();
            testObject.MySimpleTestStruct = new SimpleTestStruct {
                MyInt64 = 64, MyString = "Hello", MyInt32Array = new int[] { 32 }
            };

            string          json         = JsonSerializer.ToString(testObject);
            SimpleTestClass parsedObject = JsonSerializer.Parse <SimpleTestClass>(json);

            parsedObject.Verify();
        }
Example #34
0
        public void TestAbstract()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";
            js.JsonOptions.SaveRootClass = true;
            var jd = new JsonDeserializer();

            SampleAbstract v1 = new SampleConcrete { XX = 81 };
            var result1 = js.ToString(v1);
            Assert.AreEqual("{\"class\":\"YuzuTest.SampleConcrete, YuzuTest\",\"XX\":81}", result1);

            var w1 = jd.FromString<SampleAbstract>(result1);
            Assert.AreEqual((v1 as SampleConcrete).XX, (w1 as SampleConcrete).XX);
            var w1g = (SampleConcrete)SampleAbstract_JsonDeserializer.Instance.FromString(result1);
            Assert.AreEqual((v1 as SampleConcrete).XX, w1g.XX);

            var v2 = new List<SampleAbstract>();
            v2.Add(new SampleConcrete { XX = 51 });

            var w2 = jd.FromString<List<SampleAbstract>>(js.ToString(v2));
            Assert.AreEqual(v2.Count, w2.Count);
            Assert.AreEqual((v2[0] as SampleConcrete).XX, (w2[0] as SampleConcrete).XX);
        }
Example #35
0
        public void TestBinaryToJsonUnknown()
        {
            var bs = new BinarySerializer();
            var bd = new BinaryDeserializer();
            var js = new JsonSerializer();
            js.JsonOptions.SaveRootClass = true;
            var jd = new JsonDeserializer();

            var n = "NewType".ToCharArray().Select(ch => (byte)ch).ToList();
            var data1 =
                new byte[] { 0x20, 0x01, 0x00, (byte)n.Count }.Concat(n).
                Concat(new byte[] { 0x01, 0x00, 0x01, (byte)'X', (byte)RoughType.String, 0x01, 0x00,
                    0x03, (byte)'a', (byte)'b', (byte)'c', 0, 0
                }).ToArray();
            var result1 = bs.ToBytes(jd.FromString(js.ToString(bd.FromBytes(data1))));
            CollectionAssert.AreEqual(data1, result1);
        }
Example #36
0
        public void TestAfterDeserialization()
        {
            var js = new JsonSerializer();
            var v0 = new SampleAfter { X = "m" };
            var result0 = js.ToString(v0);
            Assert.AreEqual("{\n\t\"X\":\"m\"\n}", result0);

            var jd = new JsonDeserializer();
            var w0 = new SampleAfter();
            jd.FromString(w0, result0);
            Assert.AreEqual("m1", w0.X);

            var w1 = new SampleAfter2();
            jd.FromString(w1, result0);
            Assert.AreEqual("m231", w1.X);

            var w2 = (SampleAfter2)SampleAfter2_JsonDeserializer.Instance.FromString(result0);
            Assert.AreEqual("m231", w2.X);
        }
Example #37
0
File: Speed.cs Project: klenin/Yuzu
        public void TestJsonLongArrayStr()
        {
            var list1 = new SampleArray { A = new string[100000] };
            for (int i = 0; i < list1.A.Length; ++i)
                list1.A[i] = i.ToString();

            var js = new JsonSerializer();
            js.JsonOptions.ArrayLengthPrefix = true;
            var result1 = js.ToString(list1);
            Assert.IsTrue(result1 != "");

            var list2 = new SampleArray();
            var jd = new JsonDeserializer();
            jd.JsonOptions.ArrayLengthPrefix = true;
            jd.FromString(list2, result1);
            Assert.AreEqual(list1.A.Length, list2.A.Length);

            var jdg = new SampleArray_JsonDeserializer();
            var list3 = (SampleArray)jdg.FromString(result1);
            Assert.AreEqual(list1.A.Length, list3.A.Length);
        }
Example #38
0
File: Speed.cs Project: klenin/Yuzu
        public void TestJsonLongListDouble()
        {
            var list1 = new List<double>();
            var rnd = new Random();
            for (int i = 0; i < 50000; ++i)
                list1.Add(i * 19234.73457);
            for (int i = 0; i < 50000; ++i)
                list1.Add(rnd.NextDouble());
            for (int i = 0; i < 10000; ++i)
                list1.Add(rnd.NextDouble() * 1e27);
            for (int i = 0; i < 10000; ++i)
                list1.Add(rnd.NextDouble() * 1e-27);

            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";
            var result1 = js.ToString(list1);
            Assert.IsTrue(result1 != "");

            var list2 = (new JsonDeserializer()).FromString<List<double>>(result1);
            for (int i = 0; i < list1.Count; ++i)
                Assert.AreEqual(list1[i], list2[i]);
        }
Example #39
0
        public void TestDelegate()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";

            var v1 = new SampleSelfDelegate { x = 77 };
            v1.OnSomething = v1.Handler1;
            var result = js.ToString(v1);
            Assert.AreEqual("{\"OnSomething\":\"Handler1\",\"x\":77}", result);

            var w1 = new SampleSelfDelegate();
            var jd = new JsonDeserializer();
            jd.FromString(w1, result);
            Assert.AreEqual(v1.x, w1.x);
            w1.OnSomething(10);
            Assert.AreEqual(87, w1.x);

            jd.FromString(w1, result.Replace("Handler1", "Handler2"));
            w1.OnSomething(10);
            Assert.AreEqual(770, w1.x);
        }
Example #40
0
        public void TestEscape()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";

            var s = "\"/{\u0001}\n\t\"\"";
            var v = new Sample1 { Y = s };
            var result = js.ToString(v);
            Assert.AreEqual("{\"X\":0,\"Y\":\"\\\"/{\\u0001}\\n\\t\\\"\\\"\"}", result);

            var w = new Sample1();
            var jd = new JsonDeserializer();
            jd.FromString(w, result);
            Assert.AreEqual(s, w.Y);

            v.Y = result;
            var result1 = js.ToString(v);
            jd.FromString(w, result1);
            Assert.AreEqual(result, w.Y);

            v.Y = "привет";
            var result2 = js.ToString(v);
            Assert.AreEqual("{\"X\":0,\"Y\":\"привет\"}", result2);

            jd.FromString(w, result2);
            Assert.AreEqual(v.Y, w.Y);
            jd.FromString(w, "{\"X\":0,\"Y\":\"\u043F\u0440\u0438\u0432\u0435\u0442\"}");
            Assert.AreEqual(v.Y, w.Y);
        }
Example #41
0
        public void TestClassNames()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.SaveRootClass = true;
            js.Options.TagMode = TagMode.Names;
            Assert.AreEqual(
                "{\n\"class\":\"YuzuTest.SampleBase, YuzuTest\",\n\"FBase\":0\n}", js.ToString(new SampleBase()));
            Assert.AreEqual(
                "{\n\"class\":\"YuzuTest.SampleDerivedA, YuzuTest\",\n\"FBase\":0,\n\"FA\":0\n}",
                js.ToString(new SampleDerivedA()));

            var jd = new JsonDeserializer();
            jd.Options.TagMode = TagMode.Names;
            var v = jd.FromString(
                "{\n\"class\":\"YuzuTest.SampleDerivedB, YuzuTest\",\n\"FBase\":3,\n\"FB\":7\n}");
            Assert.IsInstanceOfType(v, typeof(SampleDerivedB));
            var b = (SampleDerivedB)v;
            Assert.AreEqual(3, b.FBase);
            Assert.AreEqual(7, b.FB);
        }
Example #42
0
        public void TestCompact()
        {
            var v = new SampleRect {
                A = new SamplePoint { X = 33, Y = 44 },
                B = new SamplePoint { X = 55, Y = 66 },
            };
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = " ";
            var result = js.ToString(v);
            Assert.AreEqual("{ \"A\":[ 33, 44 ], \"B\":[ 55, 66 ] }", result);

            var jd = new JsonDeserializer();
            var w = new SampleRect();
            jd.FromString(w, result);
            CheckSampleRect(v, w);

            w = (SampleRect)SampleRect_JsonDeserializer.Instance.FromString(result);
            CheckSampleRect(v, w);
        }
Example #43
0
        public void TestDecimal()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";

            var v = new SampleDecimal { N = -12.34m };

            var jd = new JsonDeserializer();

            var result1 = js.ToString(v);
            Assert.AreEqual("{\n\"N\":-12.34\n}", result1);
            var w1 = new SampleDecimal();
            jd.FromString(w1, result1);
            Assert.AreEqual(v.N, w1.N);

            jd.JsonOptions.DecimalAsString = js.JsonOptions.DecimalAsString = true;
            var result2 = js.ToString(v);
            Assert.AreEqual("{\n\"N\":\"-12.34\"\n}", result2);
            var w2 = new SampleDecimal();
            jd.FromString(w2, result2);
            Assert.AreEqual(v.N, w2.N);

            var w3 = (SampleDecimal)SampleDecimal_JsonDeserializer.Instance.FromString(result1);
            Assert.AreEqual(v.N, w3.N);
        }
Example #44
0
        public void TestMatrix()
        {
            var src = "{\"M\":[[1,2,3],[4,5],[6],[]]}";
            var v = new SampleMatrix();
            (new JsonDeserializer()).FromString(v, src);
            Assert.AreEqual(4, v.M.Count);
            CollectionAssert.AreEqual(new int[] { 1, 2, 3 }, v.M[0]);
            CollectionAssert.AreEqual(new int[] { 4, 5 }, v.M[1]);
            CollectionAssert.AreEqual(new int[] { 6 }, v.M[2]);
            Assert.AreEqual(0, v.M[3].Count);

            v = (SampleMatrix)SampleMatrix_JsonDeserializer.Instance.FromString(src);
            Assert.AreEqual(4, v.M.Count);
            CollectionAssert.AreEqual(new int[] { 1, 2, 3 }, v.M[0]);
            CollectionAssert.AreEqual(new int[] { 4, 5 }, v.M[1]);
            CollectionAssert.AreEqual(new int[] { 6 }, v.M[2]);
            Assert.AreEqual(0, v.M[3].Count);

            var js = new JsonSerializer();
            js.JsonOptions.FieldSeparator = "";
            js.JsonOptions.Indent = "";
            Assert.AreEqual(src, js.ToString(v));
        }
Example #45
0
        public void TestLong()
        {
            var js = new JsonSerializer();
            var v1 = new SampleLong { S = -1L << 33, U = 1UL << 33 };

            js.JsonOptions.Indent = "";
            var result = js.ToString(v1);
            Assert.AreEqual("{\n\"S\":-8589934592,\n\"U\":8589934592\n}", result);

            var v2 = new SampleLong();
            var jd = new JsonDeserializer();
            jd.FromString(v2, result);
            Assert.AreEqual(v1.S, v2.S);
            Assert.AreEqual(v1.U, v2.U);

            js.JsonOptions.Int64AsString = true;
            var result1 = js.ToString(v1);
            Assert.AreEqual("{\n\"S\":\"-8589934592\",\n\"U\":\"8589934592\"\n}", result1);
            var jd1 = new JsonDeserializer();
            jd1.JsonOptions.Int64AsString = true;
            jd1.FromString(v2, result1);
            Assert.AreEqual(v1.S, v2.S);
            Assert.AreEqual(v1.U, v2.U);

            js.JsonOptions.Int64AsString = false;
            v1.S = long.MinValue;
            v1.U = ulong.MaxValue;
            jd.FromString(v2, js.ToString(v1));
            Assert.AreEqual(v1.S, v2.S);
            Assert.AreEqual(v1.U, v2.U);
        }
Example #46
0
        public void TestList()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.Options.TagMode = TagMode.Names;
            var jd = new JsonDeserializer();
            jd.Options.TagMode = TagMode.Names;

            var v0 = new SampleList { E = new List<string> { "a", "b", "c" } };
            var result0 = js.ToString(v0);
            Assert.AreEqual("{\n\"E\":[\n\"a\",\n\"b\",\n\"c\"\n]\n}", result0);
            var w0 = new SampleList();
            jd.FromString(w0, result0);
            CollectionAssert.AreEqual(v0.E, w0.E);

            var v1 = new SampleTree { Value = 11, Children = new List<SampleTree>() };
            Assert.AreEqual("{\n\"Value\":11,\n\"Children\":[]\n}", js.ToString(v1));
            var w1 = new SampleTree();
            jd.FromString(w1, js.ToString(v1));
            Assert.AreEqual(0, w1.Children.Count);

            var v2 = new SampleTree {
                Value = 11,
                Children = new List<SampleTree> {
                    new SampleTree {
                        Value = 12,
                        Children = new List<SampleTree>(),
                    },
                    new SampleTree {
                        Value = 13,
                    }
                }
            };
            var result2 = js.ToString(v2);
            Assert.AreEqual(
                "{\n\"Value\":11,\n\"Children\":[\n" +
                "{\n\"Value\":12,\n\"Children\":[]\n},\n" +
                "{\n\"Value\":13,\n\"Children\":null\n}\n" +
                "]\n}",
                result2);
            SampleTree w2 = new SampleTree();
            jd.FromString(w2, result2);
            Assert.AreEqual(v2.Value, w2.Value);
            Assert.AreEqual(v2.Children.Count, w2.Children.Count);
            Assert.AreEqual(v2.Children[0].Value, w2.Children[0].Value);
            Assert.AreEqual(v2.Children[1].Children, w2.Children[1].Children);

            Assert.AreEqual("{\n}", js.ToString(new SampleEmptyList()));
            Assert.AreEqual("{\n\"E\":null\n}", js.ToString(new SampleEmptyList { E = null }));
        }
Example #47
0
        public void TestInterface()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";
            var v1 = new SampleInterfaceField { I = new SampleInterfaced { X = 34 } };
            var result1 = js.ToString(v1);
            Assert.AreEqual("{\"I\":{\"class\":\"YuzuTest.SampleInterfaced, YuzuTest\",\"X\":34}}", result1);

            var w1 = new SampleInterfaceField();
            var jd = new JsonDeserializer();
            jd.FromString(w1, result1);
            Assert.IsInstanceOfType(w1.I, typeof(SampleInterfaced));
            Assert.AreEqual(34, w1.I.X);

            var w1g = (SampleInterfaceField)SampleInterfaceField_JsonDeserializer.Instance.FromString(result1);
            Assert.IsInstanceOfType(w1g.I, typeof(SampleInterfaced));
            Assert.AreEqual(34, w1g.I.X);

            var w1n = (SampleInterfaceField)SampleInterfaceField_JsonDeserializer.Instance.FromString("{\"I\":null}");
            Assert.AreEqual(null, w1n.I);

            var v2 = new List<ISample> { null, new SampleInterfaced { X = 37 } };
            var result2 = js.ToString(v2);
            Assert.AreEqual("[null,{\"class\":\"YuzuTest.SampleInterfaced, YuzuTest\",\"X\":37}]", result2);

            var w2 = new List<ISample>();
            jd.FromString(w2, result2);
            Assert.AreEqual(2, w2.Count);
            Assert.IsNull(w2[0]);
            Assert.AreEqual(37, w2[1].X);

            ISampleField v3 = new SampleInterfacedField { X = 41 };
            js.JsonOptions.SaveRootClass = true;
            var result3 = js.ToString(v3);
            Assert.AreEqual("{\"class\":\"YuzuTest.SampleInterfacedField, YuzuTest\",\"X\":41}", result3);
            var w3 = (ISampleField)jd.FromString(result3);
            Assert.AreEqual(41, w3.X);
        }
Example #48
0
        public void TestIndentation()
        {
            var js = new JsonSerializer();
            js.JsonOptions.SaveRootClass = true;

            var v1 = new SampleTree {
                Value = 1, Children = new List<SampleTree> {
                    new SampleTree {
                        Value = 11,
                        Children = null
                    },
                    new SampleTree {
                        Value = 12,
                        Children = new List<SampleTree> {
                            new SampleTree {
                                Value = 121,
                                Children = null
                            },
                        },
                    },
                }
            };
            Assert.AreEqual(
                "{\n" +
                "\t\"class\":\"YuzuTest.SampleTree, YuzuTest\",\n" +
                "\t\"a\":1,\n" +
                "\t\"b\":[\n" +
                "\t\t{\n" +
                "\t\t\t\"a\":11,\n" +
                "\t\t\t\"b\":null\n" +
                "\t\t},\n" +
                "\t\t{\n" +
                "\t\t\t\"a\":12,\n" +
                "\t\t\t\"b\":[\n" +
                "\t\t\t\t{\n" +
                "\t\t\t\t\t\"a\":121,\n" +
                "\t\t\t\t\t\"b\":null\n" +
                "\t\t\t\t}\n" +
                "\t\t\t]\n" +
                "\t\t}\n" +
                "\t]\n" +
                "}",
                js.ToString(v1));

            var v2 = new Dictionary<string, SamplePoint> {
                { "a", new SamplePoint { X = 4, Y = 3 } }
            };
            Assert.AreEqual(
                "{\n" +
                "\t\"a\":[\n" +
                "\t\t4,\n" +
                "\t\t3\n" +
                "\t]\n" +
                "}",
                js.ToString(v2));
        }
Example #49
0
 public void TestGeneric()
 {
     var js = new JsonSerializer();
     js.JsonOptions.Indent = "";
     js.JsonOptions.FieldSeparator = "";
     var v1 = new SampleInterfaceField { I = new SampleInterfacedGeneric<string> { X = 35, G = "qq" } };
     var n = "YuzuTest.SampleInterfacedGeneric`1[[System.String]], YuzuTest";
     var result1 = js.ToString(v1);
     Assert.AreEqual(
         String.Format("{{\"I\":{{\"class\":\"{0}\",\"G\":\"qq\",\"X\":35}}}}", n), result1);
     var w1 = (SampleInterfaceField)(new JsonDeserializer()).FromString(new SampleInterfaceField(), result1);
     Assert.AreEqual(w1.I.X, 35);
     Assert.AreEqual((w1.I as SampleInterfacedGeneric<string>).G, "qq");
     var w1g = (SampleInterfaceField)SampleInterfaceField_JsonDeserializer.Instance.FromString(result1);
     Assert.AreEqual(w1g.I.X, 35);
     Assert.AreEqual((w1g.I as SampleInterfacedGeneric<string>).G, "qq");
 }
Example #50
0
        public void TestDefault()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = " ";

            var v1 = new Sample1 { X = 6, Y = "ttt" };
            var result1 = js.ToString(v1);
            Assert.AreEqual("{ \"X\":6 }", result1);
            var w1 = (Sample1)Sample1_JsonDeserializer.Instance.FromString(result1);
            Assert.AreEqual(6, w1.X);
            Assert.AreEqual("zzz", w1.Y);

            var v2 = new Sample2 { X = 5, Y = "5" };
            var result2 = js.ToString(v2);
            Assert.AreEqual("{ \"X\":5 }", result2);

            var v3 = new SampleDefault();
            Assert.AreEqual("{ }", js.ToString(new SampleDefault()));
            v3.B = "z";
            var result3 = js.ToString(v3);
            Assert.AreEqual("{ \"B\":\"z\" }", result3);
            var w3 = new SampleDefault();
            (new JsonDeserializer()).FromString(w3, result3);
            Assert.AreEqual(3, w3.A);
            Assert.AreEqual("z", w3.B);
            Assert.AreEqual(new SamplePoint { X = 7, Y = 2 }, w3.P);
        }
Example #51
0
 public void TestDeclarationErrors()
 {
     var js = new JsonSerializer();
     js.Options.TagMode = TagMode.Aliases;
     XAssert.Throws<YuzuException>(() => js.ToString(new Bad1()), "F");
     XAssert.Throws<YuzuException>(() => js.ToString(new Bad2()), "F");
     XAssert.Throws<YuzuException>(() => js.ToString(new Bad3()), "G");
     XAssert.Throws<YuzuException>(() => js.ToString(new BadPrivate()), "'F'");
     XAssert.Throws<YuzuException>(() => js.ToString(new BadPrivateGetter()), "'F'");
     XAssert.Throws<YuzuException>(() => js.ToString(new SampleMultiCollection()), "SampleMultiCollection");
 }
Example #52
0
        public void TestMemberOfInterface()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";

            var v1 = new List<ISampleMember>();
            var result1 = js.ToString(v1);
            Assert.AreEqual("[]", result1);

            var jd = new JsonDeserializer();
            var w1 = new List<ISampleMember>();
            jd.FromString(w1, result1);
            Assert.AreEqual(0, w1.Count);

            v1.Add(new SampleMemberI());
            var result1p = js.ToString(v1);
            Assert.AreEqual("[{\"class\":\"YuzuTest.SampleMemberI, YuzuTest\"}]", result1p);
            jd.FromString(w1, result1p);
            Assert.AreEqual(71, w1[0].X);

            var v2 = new List<ISampleMember> { new SampleMemberI(), new SampleMemberI { X = 99 } };
            var result2 = js.ToString(v2);
            var w2 = new List<ISampleMember>();
            jd.FromString(w2, result2);
            YuzuGen.System.Collections.Generic.List_ISampleMember_JsonDeserializer.Instance.FromString(w2, result2);
            Assert.AreEqual(v2[0].X, w2[0].X);
            Assert.AreEqual(v2[1].X, w2[1].X);

            Assert.AreEqual("[]", js.ToString(new List<SampleMemberAbstract>()));
            var v3 = new List<SampleMemberAbstract> { new SampleMemberConcrete() };
            var result3 = js.ToString(v3);
            Assert.AreEqual("[{\"class\":\"YuzuTest.SampleMemberConcrete, YuzuTest\"}]", result3);
            var w3 = new List<SampleMemberAbstract>();
            jd.FromString(w3, result3);
            Assert.AreEqual(72, w3[0].X);
        }
Example #53
0
        public void TestDate()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = " ";
            var jd = new JsonDeserializer();

            var n = DateTime.Now;
            Assert.AreEqual("\"" + n.ToString("O") + "\"", js.ToString(n));

            var t = DateTime.Now - DateTime.MinValue;
            Assert.AreEqual("\"" + t.ToString("c") + "\"", js.ToString(t));

            var v1 = new SampleDate { D = new DateTime(2011, 3, 25), T = TimeSpan.FromMinutes(5) };
            var result1 = js.ToString(v1);
            Assert.AreEqual("{ \"D\":\"2011-03-25T00:00:00.0000000\", \"T\":\"00:05:00\" }", result1);

            js.JsonOptions.DateFormat = @"yyyy";
            js.JsonOptions.TimeSpanFormat = @"hh\#mm\#ss";
            Assert.AreEqual("{ \"D\":\"2011\", \"T\":\"00#05#00\" }", js.ToString(v1));

            var w1 = new SampleDate();
            (new JsonDeserializer()).FromString(w1, result1);
            Assert.AreEqual(v1.D, w1.D);
            Assert.AreEqual(v1.T, w1.T);

            w1 = (SampleDate)SampleDate_JsonDeserializer.Instance.FromString(result1);
            Assert.AreEqual(v1.D, w1.D);
            Assert.AreEqual(v1.T, w1.T);

            js.JsonOptions.DateFormat = "O";
            var v2 = new DateTime(2011, 3, 25, 1, 2, 3, DateTimeKind.Utc);
            var result2 = js.ToString(v2);
            Assert.AreEqual("\"2011-03-25T01:02:03.0000000Z\"", result2);
            var w2 = jd.FromString<DateTime>(result2);
            Assert.AreEqual(v2, w2);
            Assert.AreEqual(v2.Kind, w2.Kind);

            var v3 = new DateTime(2011, 3, 25, 1, 2, 3, DateTimeKind.Local);
            var result3 = js.ToString(v3);
            var w3 = jd.FromString<DateTime>(result3);
            Assert.AreEqual(v3, w3);
            Assert.AreEqual(v3.Kind, w3.Kind);
        }
Example #54
0
 public void TestMemberOrder()
 {
     var js = new JsonSerializer();
     js.Options.TagMode = TagMode.Names;
     js.JsonOptions.Indent = "";
     var result = js.ToString(new SampleMethodOrder());
     Assert.AreEqual("{\n\"F1\":0,\n\"P1\":0,\n\"F2\":0,\n\"P2\":0\n}", result);
 }
Example #55
0
        public void TestCollection()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            var jd = new JsonDeserializer();

            var v0 = new SampleWithCollection();
            v0.A.Add(new SampleInterfaced { X = 9 });
            v0.B.Add(7);
            v0.B.Add(6);
            var result0 = js.ToString(v0);
            Assert.AreEqual(
                "{\n" +
                    "\"A\":[\n{\n\"class\":\"YuzuTest.SampleInterfaced, YuzuTest\",\n\"X\":9\n}\n],\n" +
                    "\"B\":[\n7,\n6\n]\n" +
                "}",
                result0);

            var w0 = new SampleWithCollection();
            jd.FromString(w0, result0);
            Assert.AreEqual(1, w0.A.Count);
            Assert.IsInstanceOfType(w0.A.First(), typeof(SampleInterfaced));
            Assert.AreEqual(9, w0.A.First().X);
            CollectionAssert.AreEqual(new int[] { 7, 6 }, w0.B.ToList());

            var w1 = (SampleWithCollection)SampleWithCollection_JsonDeserializer.Instance.FromString(result0);
            Assert.AreEqual(1, w1.A.Count);
            Assert.IsInstanceOfType(w1.A.First(), typeof(SampleInterfaced));
            Assert.AreEqual(9, w1.A.First().X);
            CollectionAssert.AreEqual(new int[] { 7, 6 }, w1.B.ToList());

            var v2 = new SampleCollection<int> { 2, 5, 4 };
            var result1 = js.ToString(v2);
            Assert.AreEqual("[\n2,\n5,\n4\n]", result1);
            var w2 = (SampleCollection<int>)SampleCollection_Int32_JsonDeserializer.Instance.FromString(result1);
            CollectionAssert.AreEqual(v2.ToList(), w2.ToList());
            var w2g = (SampleExplicitCollection<int>)
                SampleExplicitCollection_Int32_JsonDeserializer.Instance.FromString(result1);
            CollectionAssert.AreEqual(v2.ToList(), w2g.ToList());

            var v3 = new SampleConcreteCollection { 8, 3, 1 };
            var result3 = js.ToString(v3);
            Assert.AreEqual("[\n8,\n3,\n1\n]", result3);
            var w3 = new SampleConcreteCollection();
            jd.FromString(w3, result3);
            CollectionAssert.AreEqual(v3.ToList(), w3.ToList());
            var w3g = (SampleConcreteCollection)
                SampleConcreteCollection_JsonDeserializer.Instance.FromString(result3);
            CollectionAssert.AreEqual(v3.ToList(), w3g.ToList());
        }
Example #56
0
        public void TestErrors()
        {
            var js = new JsonSerializer();
            XAssert.Throws<YuzuException>(() => js.ToString(new Empty()), "Empty");
            XAssert.Throws<YuzuException>(() => js.ToString(new SampleCollectionWithField<int>()), "collection");
            XAssert.Throws<YuzuException>(() => js.ToString(new SampleInterfacedFieldDup()), "X");
            XAssert.Throws<YuzuException>(() => js.ToString(new BadMerge1()), "merge");
            XAssert.Throws<YuzuException>(() => js.ToString(new BadMerge2()), "merge");

            var jd = new JsonDeserializer();
            var w = new Sample1();
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{}"), "X");
            XAssert.Throws<YuzuException>(() => jd.FromString("{null:1}"), "'n'");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"X\" }"), ":");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "nn"), "'u'");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"X\":1, \"Y\": \"\\z\" }"), "z");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"X\":1, \"Y\": \"\\uQ\" }"), "Q");
            XAssert.Throws<YuzuException>(() => jd.FromString(new SampleBool(), "{ \"B\": 1 }"), "1");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ ,}"), ",");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"Y\": \"q\" }"), "'X'");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "[]"), "'Sample1'");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"class\": \"Q\" }"), "'Q'");
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "{ \"class\": \"YuzuTest.Sample2, YuzuTest\" }"), ".Sample2");
            XAssert.Throws<YuzuException>(() => jd.FromString(
                new Sample2Allow(), "{ \"class\": \"YuzuTest.Sample1, YuzuTest\" }"), ".Sample1");
            XAssert.Throws<YuzuException>(() => jd.FromString(new SamplePoint(), "[ \"QQ\" ]"), "");
            XAssert.Throws<YuzuException>(() => jd.FromString(new object(), "{}"), "object");
            XAssert.Throws<EndOfStreamException>(() => jd.FromString(""), "");
            XAssert.Throws<EndOfStreamException>(() => jd.FromString(w, "{ \"X\": 1"));
            XAssert.Throws<YuzuException>(() => jd.FromString(
                "{\"class\":\"YuzuTest.SampleInterfaceField, YuzuTest\",\"I\":{}}"), "class");
            XAssert.Throws<YuzuException>(() => jd.FromString(
                "{\"class\":\"YuzuTest.SampleInterfaceField, YuzuTest\",\"I\":{\"class\":\"YuzuTest.Sample1, YuzuTest\"}}"),
                "ISample");

            jd.Options.ReportErrorPosition = true;
            XAssert.Throws<YuzuException>(() => jd.FromString(w, "      z"), "7");
            jd.Options.ReportErrorPosition = false;
            try {
                jd.FromString(w, "      z");
            }
            catch (YuzuException e) {
                Assert.IsFalse(e.Message.Contains("7"));
            }
        }
Example #57
0
        public void TestEnum()
        {
            var js = new JsonSerializer();

            var v = new Sample4 { E = SampleEnum.E3 };
            js.JsonOptions.Indent = "";

            var result1 = js.ToString(v);
            Assert.AreEqual("{\n\"E\":2\n}", result1);

            js.JsonOptions.EnumAsString = true;
            var result2 = js.ToString(v);
            Assert.AreEqual("{\n\"E\":\"E3\"\n}", result2);

            var jd = new JsonDeserializer();
            var w = new Sample4();
            jd.FromString(w, result1);
            Assert.AreEqual(SampleEnum.E3, w.E);

            w.E = SampleEnum.E1;
            jd.JsonOptions.EnumAsString = true;
            jd.FromString(w, result2);
            Assert.AreEqual(SampleEnum.E3, w.E);

            w = (Sample4)Sample4_JsonDeserializer.Instance.FromString(result2);
            Assert.AreEqual(SampleEnum.E3, w.E);
        }
Example #58
0
        public void TestDictionaryKeys()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.JsonOptions.FieldSeparator = "";

            var v0 = new SampleDictKeys {
                I =  new Dictionary<int, int> { { 5, 7 } },
                E =  new Dictionary<SampleEnum, int> { { SampleEnum.E2, 8 } },
                K =  new Dictionary<SampleKey, int> { { new SampleKey { V = 3 }, 9 } },
            };
            var result0 = js.ToString(v0);
            Assert.AreEqual(
                "{" +
                "\"E\":{\"E2\":8}," +
                "\"I\":{\"5\":7}," +
                "\"K\":{\"3!\":9}" +
                "}", result0);

            JsonDeserializer.RegisterKeyParser(
                typeof(SampleKey),
                s => new SampleKey { V = int.Parse(s.Substring(0, s.Length - 1)) });

            var jd = new JsonDeserializer();
            var w = new SampleDictKeys();
            jd.FromString(w, result0);
            Assert.AreEqual(1, w.I.Count);
            Assert.AreEqual(7, w.I[5]);
            Assert.AreEqual(1, w.E.Count);
            Assert.AreEqual(8, w.E[SampleEnum.E2]);
            Assert.AreEqual(1, w.K.Count);
            Assert.AreEqual(9, w.K[new SampleKey { V = 3 }]);

            w = (SampleDictKeys)SampleDictKeys_JsonDeserializer.Instance.FromString(result0);
            Assert.AreEqual(1, w.I.Count);
            Assert.AreEqual(7, w.I[5]);
            Assert.AreEqual(1, w.E.Count);
            Assert.AreEqual(8, w.E[SampleEnum.E2]);
            Assert.AreEqual(1, w.K.Count);
            Assert.AreEqual(9, w.K[new SampleKey { V = 3 }]);
        }
Example #59
0
        public void TestDictionary()
        {
            var js = new JsonSerializer();
            js.JsonOptions.Indent = "";
            js.Options.TagMode = TagMode.Names;
            var jd = new JsonDeserializer();
            jd.Options.TagMode = TagMode.Names;

            var v0 = new SampleDict {
                Value = 3, Children = new Dictionary<string, SampleDict> {
                { "a", new SampleDict { Value = 5, Children = new Dictionary<string, SampleDict>() } },
                { "b", new SampleDict { Value = 7 } },
            }
            };
            var result0 = js.ToString(v0);
            Assert.AreEqual(
                "{\n\"Value\":3,\n\"Children\":{\n" +
                "\"a\":{\n\"Value\":5,\n\"Children\":{}\n},\n" +
                "\"b\":{\n\"Value\":7,\n\"Children\":null\n}\n" +
                "}\n}", result0);

            var w0 = new SampleDict();
            jd.FromString(w0, result0);
            Assert.AreEqual(v0.Value, w0.Value);
            Assert.AreEqual(v0.Children.Count, w0.Children.Count);
            Assert.AreEqual(v0.Children["a"].Value, w0.Children["a"].Value);

            var w1 = (SampleDict)SampleDict_JsonDeserializer.Instance.FromString(result0);
            Assert.AreEqual(v0.Value, w1.Value);
            Assert.AreEqual(v0.Children.Count, w1.Children.Count);
            Assert.AreEqual(v0.Children["a"].Value, w1.Children["a"].Value);
        }
Example #60
0
        public void TestFloat()
        {
            var js = new JsonSerializer();
            js.Options.TagMode = TagMode.Names;

            var v = new SampleFloat { F = 1e-20f, D = -3.1415e100d };
            js.JsonOptions.Indent = "";

            var result1 = js.ToString(v);
            Assert.AreEqual("{\n\"F\":1E-20,\n\"D\":-3.1415E100\n}", result1);

            var w = new SampleFloat();
            var jd = new JsonDeserializer();
            jd.Options.TagMode = TagMode.Names;
            jd.FromString(w, result1);
            Assert.AreEqual(v.F, w.F);
            Assert.AreEqual(v.D, w.D);

            Assert.AreEqual("NaN", js.ToString(Double.NaN));
            Assert.AreEqual("Infinity", js.ToString(Double.PositiveInfinity));
            Assert.AreEqual("-Infinity", js.ToString(Double.NegativeInfinity));
        }