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" ); }
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 ); }
/// <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); } } }
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"); }
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]); }
public override Dictionary <string, object> GetObject() { return(ValueCopyer.ValueOf(new RandomValueReader(1218).FastReadObject <Device>()).ReadDictionary <string, object>()); }
public override DataTable GetObject() { return(ValueCopyer.ValueOf(new RandomValueReader(1218).ReadList <Device>()).ReadDataTable().IdentifyColumnTypes()); }
public object Convert(object value, Type type) => ValueInterface.ReadValue(ValueCopyer.ValueOf(value), type);