Example #1
0
        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"));
        }
Example #2
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"
                );
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
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
                );
        }