示例#1
0
        /// <summary>
        /// 将文档字符串反序列化到指定的对象中。
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="textFormatter">文档反序列化器</param>
        /// <param name="textReader">文档字符串读取器</param>
        /// <param name="obj">对象</param>
        public static void DeserializeTo <T>(this ITextFormatter textFormatter, TextReader textReader, T obj)
        {
            IDataWriter dataWriter;

            try
            {
                dataWriter = RWHelper.CreateRW(obj);
            }
            catch (NotSupportedException)
            {
                dataWriter = RWHelper.CreateWriter <T>();

                RWHelper.SetContent(dataWriter, obj);
            }

            if (dataWriter is IDataWriter <string> nameWriter)
            {
                DeserializeTo(textFormatter, textReader, nameWriter);
            }
            else if (dataWriter is IDataWriter <int> indexWriter)
            {
                DeserializeTo(textFormatter, textReader, indexWriter);
            }
            else
            {
                var invoker = new DeserializeToAsInvoker(textFormatter, textReader, dataWriter);

                AsHelper.GetInstance(dataWriter).Invoke(invoker);
            }
        }
示例#2
0
        private T ReadScalar <T>(DbDataReader dbDataReader)
        {
            if (typeof(T).IsAssignableFrom(dbDataReader.GetFieldType(0)))
            {
                if (dbDataReader.Read())
                {
                    return((T)dbDataReader[0]);
                }

                return(default(T));
            }

            var overrideDbDataReader = new OverrideDbDataReader(dbDataReader);

            var dataWriter = RWHelper.CreateWriter <T>();

            dataWriter.Initialize();

            if (dataWriter is IDataWriter <int> )
            {
                RWHelper.Copy(overrideDbDataReader, dataWriter);

                return(RWHelper.GetContent <T>(dataWriter));
            }

            if (overrideDbDataReader.Read())
            {
                RWHelper.Copy((IDataReader <string>)overrideDbDataReader, dataWriter);

                return(RWHelper.GetContent <T>(dataWriter));
            }

            return(default(T));
        }
示例#3
0
        public void DeserializeToTest()
        {
            var obj = new { Id = 0, Name = "" };

            var jsonFormatter = new JsonFormatter();

            jsonFormatter.DeserializeTo("{\"Id\":123,\"Name\":\"Dogwei\"}", RWHelper.CreateWriter(obj));

            AreEqual(obj.Id, 123);
            AreEqual(obj.Name, "Dogwei");

            var arr = new int[3];

            jsonFormatter.DeserializeTo("[1,2,3]", RWHelper.CreateWriter(arr));

            AreEqual(arr[0], 1);
            AreEqual(arr[1], 2);
            AreEqual(arr[2], 3);
        }
示例#4
0
 public static void DeserializeTo <T>(this IBinaryFormatter binaryFormatter, HGlobalCache <byte> hGCache, T obj)
 {
     binaryFormatter.DeserializeTo(hGCache, RWHelper.CreateWriter(obj));
 }
示例#5
0
 public static void DeserializeTo <T>(this IBinaryFormatter binaryFormatter, Stream stream, T obj)
 {
     binaryFormatter.DeserializeTo(stream, RWHelper.CreateWriter(obj));
 }
示例#6
0
 public static void DeserializeTo <T>(this IBinaryFormatter binaryFormatter, byte[] bytes, T obj)
 {
     binaryFormatter.DeserializeTo(bytes, RWHelper.CreateWriter(obj));
 }
示例#7
0
 public static void DeserializeTo <T>(this ITextFormatter textFormatter, HGlobalCache <char> hGCache, T obj)
 {
     textFormatter.DeserializeTo(hGCache, RWHelper.CreateWriter(obj));
 }
示例#8
0
 public static void DeserializeTo <T>(this ITextFormatter textFormatter, TextReader textReader, T obj)
 {
     textFormatter.DeserializeTo(textReader, RWHelper.CreateWriter(obj));
 }
示例#9
0
 public static void DeserializeTo <T>(this IBinaryFormatter binaryFromatter, ReadOnlySpan <byte> text, T obj)
 {
     binaryFromatter.DeserializeTo(text, RWHelper.CreateWriter(obj));
 }
示例#10
0
 public static void DeserializeTo <T>(this ITextFormatter textFormatter, ReadOnlySpan <char> text, T obj)
 {
     textFormatter.DeserializeTo(text, RWHelper.CreateWriter(obj));
 }
示例#11
0
 public static async Task DeserializeToAsync <T>(this ITextFormatter textFormatter, Stream stream, T obj)
 {
     await textFormatter.DeserializeToAsync(stream, RWHelper.CreateWriter(obj));
 }