Ejemplo n.º 1
0
        public void XObjectTest()
        {
            var rw = XObjectRW.Create <ObjectTester>();

            AreEqual(rw.Content, null);

            AreEqual(rw.Count, 2);

            AreEqual(rw.ContentType, typeof(ObjectTester));

            rw.Initialize();

            AreNotEqual(rw.Content, null);

            AreEqual(((ObjectTester)rw.Content).Id, 0);
            AreEqual(((ObjectTester)rw.Content).Name, null);

            rw["@id"].WriteInt32(123);
            rw["@name"].WriteString("Dogwei");

            AreEqual(((ObjectTester)rw.Content).Id, 123);
            AreEqual(((ObjectTester)rw.Content).Name, "Dogwei");

            AreEqual(rw["@id"].ReadInt32(), 123);
            AreEqual(rw["@name"].ReadString(), "Dogwei");

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic &&
                dic.Count == 2 &&
                (int)dic["@id"] == 123 &&
                (string)dic["@name"] == "Dogwei"
                );
        }
Ejemplo n.º 2
0
        public void XSkipDefaultValueTest()
        {
            var rw = XObjectRW.Create <SkipDefaultValueTester>();



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 123 },
                { "Name", null }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic1 &&
                dic1.Count == 1 &&
                (int)dic1["Id"] == 123
                );



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 0 },
                { "Name", "Dogwei" }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic2 &&
                dic2.Count == 1 &&
                (string)dic2["Name"] == "Dogwei"
                );



            rw.Initialize();

            rw.OnWriteAll(RWHelper.CreateReader(new Dictionary <string, object> {
                { "Id", 0 },
                { "Name", null }
            }).As <string>());

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic3 &&
                dic3.Count == 0
                );
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 读取一个对象。
        /// </summary>
        /// <param name="valueWriter">对象写入器</param>
        public virtual void ReadObject(IDataWriter <string> valueWriter)
        {
            var obj = DirectRead();

            if (obj != null)
            {
                if (valueWriter.ContentType?.IsInstanceOfType(obj) == true)
                {
                    valueWriter.Content = obj;
                }
                else
                {
                    ValueCopyer.ValueOf(obj).ReadObject(valueWriter);
                }
            }
        }
Ejemplo n.º 4
0
        public void FastObjectTest()
        {
            var rw = FastObjectRW <ObjectTester> .Create();

            AreEqual(rw.content, null);

            AreEqual(rw.Count, 2);

            AreEqual(rw.ContentType, typeof(ObjectTester));

            rw.Initialize();

            AreNotEqual(rw.content, null);

            AreEqual(rw.content.Id, 0);
            AreEqual(rw.content.Name, null);

            rw["@id"].WriteInt32(123);
            rw["@name"].WriteString("Dogwei");

            AreEqual(rw.content.Id, 123);
            AreEqual(rw.content.Name, "Dogwei");

            AreEqual(rw["@id"].ReadInt32(), 123);
            AreEqual(rw["@name"].ReadString(), "Dogwei");

            IsTrue(
                ValueInterface <Dictionary <string, object> > .ReadValue(ValueCopyer.ValueOf(rw)) is Dictionary <string, object> dic &&
                dic.Count == 2 &&
                (int)dic["@id"] == 123 &&
                (string)dic["@name"] == "Dogwei"
                );

            rw[rw.GetOrdinal("@id")].WriteInt32(456);
            rw[rw.GetOrdinal("@name")].WriteString("Eway");

            AreEqual(rw[rw.GetOrdinal("@id")].ReadInt32(), 456);
            AreEqual(rw[rw.GetOrdinal("@name")].ReadString(), "Eway");
        }
Ejemplo n.º 5
0
        public void ReferencingTest()
        {
            var obj = new { Id = 123, Name = "Dogwei", Obj = (object)null };
            var arr = new object[2];

            arr[0] = new { Id = 123 };
            arr[1] = arr[0];

            RWHelper.CreateRW(obj).As <string>()["Obj"].DirectWrite(obj);

            AreEqual(
                JsonFormatter.SerializeObject(obj, JsonFormatterOptions.LoopReferencingNull),
                "{\"Id\":123,\"Name\":\"Dogwei\",\"Obj\":null}"
                );

            AreEqual(
                JsonFormatter.SerializeObject(obj, JsonFormatterOptions.MultiReferencingNull),
                "{\"Id\":123,\"Name\":\"Dogwei\",\"Obj\":null}"
                );

            AreEqual(
                JsonFormatter.SerializeObject(obj, JsonFormatterOptions.MultiReferencingReference),
                "{\"Id\":123,\"Name\":\"Dogwei\",\"Obj\":{\"$ref\":\"#\"}}"
                );

            Catch <JsonOutOfDepthException>(() => JsonFormatter.SerializeObject(obj));
            Catch <JsonLoopReferencingException>(() => JsonFormatter.SerializeObject(obj, JsonFormatterOptions.LoopReferencingException));

            AreEqual(
                JsonFormatter.SerializeObject(arr, JsonFormatterOptions.LoopReferencingNull),
                "[{\"Id\":123},{\"Id\":123}]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(arr, JsonFormatterOptions.MultiReferencingNull),
                "[{\"Id\":123},null]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(arr, JsonFormatterOptions.MultiReferencingReference),
                "[{\"Id\":123},{\"$ref\":\"#/0\"}]"
                );

            JsonFormatter.SerializeObject(arr);
            JsonFormatter.SerializeObject(arr, JsonFormatterOptions.LoopReferencingException);

            AreEqual(
                JsonFormatter.SerializeObject(ValueInterface <DataTable> .ReadValue(ValueCopyer.ValueOf(arr)), JsonFormatterOptions.MultiReferencingNull),
                "[{\"Id\":123},{\"Id\":123}]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(ValueInterface <DataTable> .ReadValue(ValueCopyer.ValueOf(arr)).CreateDataReader(), JsonFormatterOptions.MultiReferencingNull),
                "[{\"Id\":123},{\"Id\":123}]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(Enumerable.Range(0, 10), JsonFormatterOptions.MultiReferencingNull),
                "[0,1,2,3,4,5,6,7,8,9]"
                );

            var mar = new object[, ] {
                { arr[0], arr[0] }, { arr[0], arr[0] }
            };

            AreEqual(
                JsonFormatter.SerializeObject(mar, JsonFormatterOptions.LoopReferencingNull),
                "[[{\"Id\":123},{\"Id\":123}],[{\"Id\":123},{\"Id\":123}]]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(mar, JsonFormatterOptions.MultiReferencingNull),
                "[[{\"Id\":123},null],[null,null]]"
                );

            AreEqual(
                JsonFormatter.SerializeObject(mar, JsonFormatterOptions.MultiReferencingReference),
                "[[{\"Id\":123},{\"$ref\":\"#/0/0\"}],[{\"$ref\":\"#/0/0\"},{\"$ref\":\"#/0/0\"}]]"
                );

            JsonFormatter.SerializeObject(mar);
            JsonFormatter.SerializeObject(mar, JsonFormatterOptions.LoopReferencingException);

            var dic2 = JsonFormatter.DeserializeObject <object[]>("[{\"Id\":123},{\"$ref\":\"#/0\"}]");

            AreEqual(JsonFormatter.SerializeObject(dic2[1]), "{\"$ref\":\"#/0\"}");

            var mar2 = JsonFormatter.DeserializeObject <object[, ]>("[[{\"Id\":123},{\"$ref\":\"#/0/0\"}],[{\"$ref\":\"#/0/0\"},{\"$ref\":\"#/0/0\"}]]", JsonFormatterOptions.MultiReferencingReference);

            AreEqual(mar2[0, 0], mar2[0, 1]);
            AreEqual(mar2[1, 0], mar2[0, 1]);
            AreEqual(mar2[1, 0], mar2[1, 1]);
        }
Ejemplo n.º 6
0
 public override Dictionary <string, object> GetObject()
 {
     return(ValueCopyer.ValueOf(new RandomValueReader(1218).FastReadObject <Device>()).ReadDictionary <string, object>());
 }
Ejemplo n.º 7
0
 public override DataTable GetObject()
 {
     return(ValueCopyer.ValueOf(new RandomValueReader(1218).ReadList <Device>()).ReadDataTable().IdentifyColumnTypes());
 }
Ejemplo n.º 8
0
 public object Convert(object value, Type type)
     => ValueInterface.ReadValue(ValueCopyer.ValueOf(value), type);