Browse Source

处理json序列化

CrazyIter 4 years ago
parent
commit
2ab71de261

+ 0 - 29
TEAMModelOS.SDK/Helper/Common/JsonHelper/JsonApiHelper.cs

@@ -1,29 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Json;
-
-namespace TEAMModelOS.SDK.Helper.Common.JsonHelper
-{
-    public static class JsonApiHelper
-    {
-        static JsonSerializerOptions options = new JsonSerializerOptions()
-        {
-            WriteIndented = true,                                   //格式化json字符串
-            AllowTrailingCommas = true,                             //可以结尾有逗号
-            //IgnoreNullValues = true,                              //可以有空值,转换json去除空值属性
-            IgnoreReadOnlyProperties = true,                        //忽略只读属性
-            PropertyNameCaseInsensitive = true,                     //忽略大小写
-            //PropertyNamingPolicy = JsonNamingPolicy.CamelCase     //命名方式是默认还是CamelCase
-        };
-        public static string ToApiJson(this object input)
-        {
-            return JsonSerializer.Serialize(input, options);
-        }
-
-        public static T FromApiJson<T>(this string input)
-        {
-            return JsonSerializer.Deserialize<T>(input, options);
-        }
-    }
-}

+ 0 - 206
TEAMModelOS.SDK/Helper/Common/JsonHelper/JsonNetHelper.cs

@@ -1,206 +0,0 @@
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Helper.Common.JsonHelper
-{
-    public static class JsonNetHelper
-    {
-        static JsonSerializerSettings settings = new JsonSerializerSettings()
-        {
-            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-            PreserveReferencesHandling = PreserveReferencesHandling.None
-        };
-
-        /// <summary>
-        /// 使用json序列化为字符串
-        /// </summary>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制,如:"\/Date(1439335800000+0800)\/"</param>
-        /// <returns></returns>
-        public static string ToJson(this object input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true, bool isIndented = false)
-        {
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            //no format
-            var format = isIndented ? Newtonsoft.Json.Formatting.Indented : Formatting.None;
-            var json = JsonConvert.SerializeObject(input, format, settings);
-            return json;
-        }
-        /// <summary>
-        /// 使用json序列化为字符串
-        /// </summary>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制,如:"\/Date(1439335800000+0800)\/"</param>
-        /// <returns></returns>
-        public static string ToJsonAbs(this object input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true, bool isIndented = false)
-        {
-
-            settings = new JsonSerializerSettings
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                TypeNameHandling = TypeNameHandling.All
-            };
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            //no format
-            var format = isIndented ? Newtonsoft.Json.Formatting.Indented : Formatting.None;
-            var json = JsonConvert.SerializeObject(input, format, settings);
-            return json;
-        }
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <returns></returns>
-        public static T FromJsonAbs<T>(this string input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            var settings = new JsonSerializerSettings()
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
-                TypeNameHandling = TypeNameHandling.All
-            };
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            return JsonConvert.DeserializeObject<T>(input, settings);
-        }
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <returns></returns>
-        public static T TryFromJson<T>(this string input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            try
-            {
-                return input.FromJson<T>(dateTimeFormat, ignoreNullValue);
-            }
-            catch
-            {
-                return default(T);
-            }
-        }
-
-
-        /// <summary>
-        /// 从字典获取对象
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <returns></returns>
-        public static T DictToObj<T>(this Dictionary<string,object> dict, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            try
-            {
-                string input= ToJson(dict);
-                return input.FromJson<T>(dateTimeFormat, ignoreNullValue);
-            }
-            catch
-            {
-                return default(T);
-            }
-        }
-        /// <summary>
-        /// 从对象获取字典
-        /// </summary>
-        /// <param name="obj"></param>
-        /// <param name="dateTimeFormat"></param>
-        /// <param name="ignoreNullValue"></param>
-        /// <returns></returns>
-        public static Dictionary<string ,object> ObjToDict(this object obj, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            string input = ToJson(obj);
-            return input.FromJson<Dictionary<string, object>>(dateTimeFormat, ignoreNullValue);
-        }
-
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <returns></returns>
-        public static T FromJson<T>(this string input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            var settings = new JsonSerializerSettings()
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
-            };
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            return JsonConvert.DeserializeObject<T>(input, settings);
-        }
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <returns></returns>
-        public static object FromJson(this string input, Type type, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            var settings = new JsonSerializerSettings()
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
-            };
-            if (ignoreNullValue)
-            {
-                settings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
-            }
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            return JsonConvert.DeserializeObject(input, type, settings);
-        }
-    }
-}

+ 0 - 64
TEAMModelOS.SDK/Helper/Common/JsonHelper/JsonPath/JsonNetValueSystem.cs

@@ -1,64 +0,0 @@
-using System;
-using System.Collections;
-using System.Linq;
-using Newtonsoft.Json.Linq;
-
-namespace TEAMModelOS.SDK.Helper.Common.JsonHelper.JsonPath
-{
-    public class JsonNetValueSystem : IJsonPathValueSystem
-    {
-        public bool HasMember(object value, string member)
-        {
-            if (value is JObject)
-            {
-                return (value as JObject).Properties().Any(property => property.Name == member);
-            }
-
-            if (value is JArray)
-            {
-                var index = ParseInt(member, -1);
-                return index >= 0 && index < (value as JArray).Count;
-            }
-            return false;
-        }
-
-        public object GetMemberValue(object value, string member)
-        {
-            if (value is JObject)
-            {
-                var memberValue = (value as JObject)[member];
-                return memberValue;
-            }
-            if (value is JArray)
-            {
-                var index = ParseInt(member, -1);
-                return (value as JArray)[index];
-            }
-            return null;
-        }
-
-        public IEnumerable GetMembers(object value)
-        {
-            var jobject = value as JObject;
-            return jobject?.Properties().Select(property => property.Name);
-        }
-
-        public bool IsObject(object value) => value is JObject;
-
-        public bool IsArray(object value) => value is JArray;
-
-        public bool IsPrimitive(object value)
-        {
-            if (value == null)
-            {
-                throw new ArgumentNullException("value");
-            }
-
-            return !(value is JObject) && !(value is JArray);
-        }
-
-        int ParseInt(string s, int defaultValue) => int.TryParse(s, out int result) ? result : defaultValue;
-        
-         
-    }
-}

TEAMModelOS.SDK/Helper/Common/JsonHelper/ClassSerializers.cs → TEAMModelOS.SDK/Helper/Common/ReflectorExtensions/ClassSerializers.cs


+ 1 - 1
TEAMModelOS/Controllers/Analysis/ChangeController.cs

@@ -57,7 +57,7 @@ namespace TEAMModelOS.Controllers.Analysis
             data = FileTool.UnicodeToString(data);
             JObject parsedJson = JObject.Parse(data);
             JsonPathContext context = new JsonPathContext
-            { ValueSystem = new JsonNetValueSystem() };
+            { ValueSystem = new JsonApiValueSystem() };
             //解析试卷作答详情
             List<dynamic> papers = context.SelectNodes(parsedJson,
             query).Select(node => node.Value).ToList();

+ 25 - 0
TEAMModelOS/Controllers/Core/BlobController.cs

@@ -12,6 +12,7 @@ using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.Helper.Network.HttpHelper;
 using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
 using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Helper.Security.ShaHash;
 
 namespace TEAMModelOS.Controllers.Core
 {
@@ -119,6 +120,30 @@ namespace TEAMModelOS.Controllers.Core
             return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn", request, "exam", SnowflakeId.NextId() + ".json")).build();
           
         }
+
+
+        /// <summary>
+        /// 测试单个文本内容的上传
+        /// </summary>
+        /// <param name="azureBlobSASDto"></param>
+        /// <returns></returns>
+        [HttpPost("testjson")]
+        public async Task<BaseResponse> UploadText(JsonElement request)
+        {
+
+
+            JsonElement json= await RedisHelper.CacheShellAsync("test:" + "test", "bbbbbbbbbbbbbbbbbbbbb", 3600, () => { return test(request); });
+
+            ResponseBuilder responseBuilder = new ResponseBuilder();
+            return responseBuilder.Data(RedisHelper.HGet<JsonElement>("test:" + "test", "aaaaaaaaaaaaaaaaa")).build();
+
+        }
+
+        private Task<JsonElement> test(JsonElement request)
+        {
+            return Task.FromResult(request);
+        }
+
         private static string ContainerUrlString(string sasUrl)
         {
             ///移除http://

+ 2 - 0
TEAMModelOS/Startup.cs

@@ -112,6 +112,8 @@ namespace TEAMModelOS
             //services.AddSingleton<IServiceBusReviceService, ServiceBusReviceService>();
             //注入CSRedis
             var csredis = new CSRedis.CSRedisClient(Configuration.GetSection("Azure:Redis:ConnectionString").Get<string>());
+            CSRedis.CSRedisClient.Serialize = obj =>System.Text.Json.JsonSerializer.Serialize(obj);
+            CSRedis.CSRedisClient.Deserialize = (json, type) => System.Text.Json.JsonSerializer.Deserialize(json, type);
             RedisHelper.Initialization(csredis);
             //全局扫描基于IBusinessService接口的实现类
             //services.Scan(scan => scan.FromApplicationDependencies()