public void XIgnoreCaseTest() { var rw = XObjectRW.Create <IgnoreCaseTester>(); AreEqual(rw.xTypeInfo.Flags & XBindingFlags.RWIgnoreCase, XBindingFlags.RWIgnoreCase); rw.Initialize(); rw["name"].WriteString("low"); AreEqual(rw["Name"].ReadString(), "low"); rw["NAME"].WriteString("upp"); AreEqual(rw["Name"].ReadString(), "upp"); Catch <MissingMemberException>(() => rw["EMAN"].WriteString("err")); Catch <MissingMemberException>(() => rw["eman"].ReadString()); Catch <MemberAccessException>(() => rw["READONLY"].WriteString("err")); rw["readonly"].ReadString(); rw["WRITEONLY"].WriteString("err"); Catch <MemberAccessException>(() => rw["writeonly"].ReadString()); var nicrw = XObjectRW.Create <NoIgnoreCaseTester>(); AreEqual(nicrw.xTypeInfo.Flags & XBindingFlags.RWIgnoreCase, default(XBindingFlags)); nicrw.Initialize(); nicrw["Name"].WriteString("ok"); Catch <MissingMemberException>(() => nicrw["name"].WriteString("err")); Catch <MissingMemberException>(() => nicrw["NAME"].WriteString("err")); }
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" ); }
/// <summary> /// 使用 <see cref="XObjectRW"/> 往值写入器中写入一个对象。 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="valueWriter">值写入器</param> /// <param name="obj">对象</param> /// <param name="flags">创建 <see cref="XObjectRW"/> 的标识符</param> public static void XWriteObject <T>(this IValueWriter valueWriter, T obj, XBindingFlags flags = XBindingFlags.UseDefault) { var rw = XObjectRW.Create <T>(flags); rw.Content = obj; valueWriter.WriteObject(rw); }
/// <summary> /// 使用 <see cref="XObjectRW"/> 从值读取器中读取一个对象。 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="valueReader">值读取器</param> /// <param name="flags">创建 <see cref="XObjectRW"/> 的标识符</param> /// <returns>返回对象</returns> public static T XReadObject <T>(this IValueReader valueReader, XBindingFlags flags = XBindingFlags.UseDefault) { var rw = XObjectRW.Create <T>(flags); valueReader.ReadObject(rw); return((T)rw.Content); }
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 ); }