internal static Nullable <T> CallNullableObjectInvoke <T>(IDeserializerReader reader, JsonDeserializeSetting setting, string name, int arrayLevel) where T : struct { if (reader.Count == 0) { return(null); } var node = reader.Read(name); if (node == null) { return(null); } var nodeValue = node.GetValue(); if (node != null && StringMethodProvider.Default.IsNullValue(nodeValue)) { return(null); } if (node != null && node.NodeType == ContentNodeType.Object) { return(ZzzZzDeserializerBuilder <T> .Register(setting).Invoke(reader.Parse(node), setting, arrayLevel)); } return(ZzzZzDeserializerBuilder <T> .Register(setting).Invoke(reader, setting, arrayLevel)); }
/// <summary> /// 创建委托 /// </summary> /// <returns></returns> public static Func <IDeserializerReader, JsonDeserializeSetting, int, T> Register(JsonDeserializeSetting setting) { Func <IDeserializerReader, JsonDeserializeSetting, int, T> func = null; if (caching.TryGetValue(setting, out func)) { return(func); } lock (caching) { if (caching.TryGetValue(setting, out func)) { return(func); } var customSerialierBuilder = CustomSerializationProvider.QueryCustomeDeserilizerbuilder <T>(); if (customSerialierBuilder != null) { func = customSerialierBuilder.Build(setting); caching.TryAdd(setting, func); return(func); } func = new ZzzZzDeserializerBuilder <T>().Build(setting); caching.TryAdd(setting, func); return(func); } }
internal static T CallObjectInvoke <T>(IDeserializerReader reader, JsonDeserializeSetting setting, string name, int arrayLevel) { var node = reader.Read(name); if (node == null) { return(default(T)); } var nodeValue = node.GetValue(); if (nodeValue != null && StringMethodProvider.Default.IsNullValue(nodeValue)) { return(default(T)); } return(ZzzZzDeserializerBuilder <T> .Register(setting).Invoke(reader.Parse(node), setting, arrayLevel)); }
/// <summary> /// 执行builder,反射用到的 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="reader">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="name"></param> /// <param name="arrayLevel">层次</param> internal static T CallBuilderInvoke <T>(IDeserializerReader reader, JsonDeserializeSetting setting, string name, int arrayLevel) { var @delegate = ZzzZzDeserializerBuilder <T> .Register(setting); return(name == null? @delegate.Invoke(reader, setting, arrayLevel) : @delegate.Invoke(reader.Parse(reader.Read(name)), setting, arrayLevel)); }