예제 #1
0
        public void CanSerializeNumbersAsStrings()
        {
            var model = new ModelWithNullableTypes
            {
                Id           = "1",
                Type         = "model",
                ByteValue    = 1,
                SbyteValue   = 2,
                DecimalValue = 3,
                ShortValue   = 4,
                UshortValue  = 5,
                IntValue     = 6,
                UintValue    = 7,
                LongValue    = 8,
                UlongValue   = 9,
                FloatValue   = 10,
                DoubleValue  = 11,
                ObjectValue  = 12
            };

            var options = new JsonSerializerOptions();

            options.NumberHandling = JsonNumberHandling.WriteAsString | JsonNumberHandling.AllowReadingFromString;

            var json = model.Serialize(options);

            Assert.Equal(@"
                {
                  'data': {
                    'id': '1',
                    'type': 'model',
                    'attributes': {
                      'byteValue': '1',
                      'sbyteValue': '2',
                      'decimalValue': '3',
                      'shortValue': '4',
                      'ushortValue': '5',
                      'intValue': '6',
                      'uintValue': '7',
                      'longValue': '8',
                      'ulongValue': '9',
                      'floatValue': '10',
                      'doubleValue': '11',
                      'objectValue': '12'
                    }
                  }
                }".Format(), json, JsonStringEqualityComparer.Default);
        }
        public void Should_Convert_Values_When_ValueConvert_Is_Implemented()
        {
            var model = new ModelWithNullableTypes
            {
                DateTime1   = new DateTime(2019, 5, 20, 14, 20, 15),
                DateTime2   = new DateTime(2018, 8, 30, 3, 10, 7),
                Bool1       = true,
                Bool2       = false,
                AccessMode1 = AccessMode.Read,
                AccessMode2 = AccessMode.Write,
                Int1        = 123,
                Int2        = 456
            };

            Neo4jParameters.ValueConvert = kv =>
            {
                var(key, value) = kv;

                if (value is DateTime dateTime)
                {
                    return(dateTime.ToString("s"));
                }

                if (value is bool b)
                {
                    return(b.ToString().ToUpper());
                }

                if (value.GetType().IsEnum)
                {
                    return(value.ToString());
                }

                if (value is int i)
                {
                    return(i.ToString());
                }

                return(value);
            };

            var parameters = new Neo4jParameters()
                             .WithValue("1", model.DateTime1)
                             .WithValue("2", model.DateTime2)
                             .WithValue("3", model.Bool1)
                             .WithValue("4", model.Bool2)
                             .WithValue("5", model.AccessMode1)
                             .WithValue("6", model.AccessMode2)
                             .WithValue("7", model.Int1)
                             .WithValue("8", model.Int2);

            Assert.AreEqual(8, parameters.Count);
            Assert.IsAssignableFrom <string>(parameters["1"]);
            Assert.AreEqual("2019-05-20T14:20:15", parameters["1"]);
            Assert.IsAssignableFrom <string>(parameters["2"]);
            Assert.AreEqual("2018-08-30T03:10:07", parameters["2"]);
            Assert.IsAssignableFrom <string>(parameters["3"]);
            Assert.AreEqual("TRUE", parameters["3"]);
            Assert.IsAssignableFrom <string>(parameters["4"]);
            Assert.AreEqual("FALSE", parameters["4"]);
            Assert.IsAssignableFrom <string>(parameters["5"]);
            Assert.AreEqual("Read", parameters["5"]);
            Assert.IsAssignableFrom <string>(parameters["6"]);
            Assert.AreEqual("Write", parameters["6"]);
            Assert.IsAssignableFrom <string>(parameters["7"]);
            Assert.AreEqual("123", parameters["7"]);
            Assert.IsAssignableFrom <string>(parameters["8"]);
            Assert.AreEqual("456", parameters["8"]);
        }