/// <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); } }
private void InternalDeserializeTo <TMode>(char *chars, int length, IDataWriter dataWriter) where TMode : struct { var jsonDeserializer = new JsonDeserializer <TMode>(chars, length); if (jsonDeserializer.IsObject) { if (dataWriter is IId64DataRW <char> fastWriter) { jsonDeserializer.FastReadObject(fastWriter); } else { jsonDeserializer.SlowReadObject(dataWriter.As <string>()); } } else if (jsonDeserializer.IsArray) { jsonDeserializer.NoInliningReadArray(dataWriter.As <int>()); } else { RWHelper.SetContent(dataWriter, jsonDeserializer.DirectRead()); } }