diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 146f9603..5633193b 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -18,6 +18,8 @@ namespace base_entity { public int clicks { get; set; } public string title { get; set; } + + public string nullvalue { get; set; } } [Table(Name = "sysconfig")] public class S_SysConfig : BaseEntity> @@ -43,7 +45,7 @@ namespace base_entity .UseNoneCommandParameter(true) .UseConnectionString(FreeSql.DataType.Sqlite, "data source=test.db;max pool size=5") //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2") - .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3") + //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3") .UseLazyLoading(true) .Build(); BaseEntity.Initialization(fsql); @@ -59,10 +61,12 @@ namespace base_entity var items1 = Products.Select.Limit(10).OrderByDescending(a => a.CreateTime).ToList(); var items2 = fsql.Select().Limit(10).OrderByDescending(a => a.CreateTime).ToList(); - - BaseEntity.Orm.UseJsonMap(); - - new S_SysConfig { Name = "testkey11", Config = new TestConfig { clicks = 11, title = "testtitle11" } }.Save(); +#if NETCORE30 + BaseEntity.Orm.UseJsonMap(new System.Text.Json.JsonSerializerOptions { IgnoreNullValues = true }); +#else + BaseEntity.Orm.UseJsonMap(new JsonSerializerSettings { NullValueHandling=NullValueHandling.Ignore }); +#endif + new S_SysConfig { Name = "testkey11", Config = new TestConfig { clicks = 11, title = "testtitle11", nullvalue = null } }.Save(); new S_SysConfig { Name = "testkey22", Config = new TestConfig { clicks = 22, title = "testtitle22" } }.Save(); new S_SysConfig { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" } }.Save(); var testconfigs11 = S_SysConfig.Select.ToList(); @@ -136,7 +140,7 @@ namespace base_entity }).Wait(); - + Console.WriteLine("按任意键结束。。。"); Console.ReadKey(); diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj index c912bae3..271b69a9 100644 --- a/Examples/base_entity/base_entity.csproj +++ b/Examples/base_entity/base_entity.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.1 + netcoreapp2.1;netcoreapp3.0 @@ -13,7 +13,9 @@ - + + NETCORE30 + diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 92aaeb4b..6eb5f92d 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45;net40 + netstandard2.0;net45;net40;netcoreapp3.0 1.3.0-preview10 true YeXiangQin @@ -24,13 +24,16 @@ - + FreeSql.Extensions.JsonMap.xml 3 + + NETCORE30 + - + diff --git a/Extensions/FreeSql.Extensions.JsonMap/JsonMapCore.cs b/Extensions/FreeSql.Extensions.JsonMap/JsonMapCore.cs index a8630d74..53138def 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/JsonMapCore.cs +++ b/Extensions/FreeSql.Extensions.JsonMap/JsonMapCore.cs @@ -6,7 +6,9 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; - +#if NETCORE30 +using System.Text.Json; +#endif namespace FreeSql.Extensions { public static class JsonMapCore @@ -14,17 +16,38 @@ namespace FreeSql.Extensions static bool _isAoped = false; static object _isAopedLock = new object(); static ConcurrentDictionary _dicTypes = new ConcurrentDictionary(); - static MethodInfo MethodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string), typeof(Type) }); - static MethodInfo MethodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod("SerializeObject", new[] { typeof(object) }); +#if NETCORE30 + static MethodInfo MethodJsonConvertDeserializeObject = typeof(JsonSerializer).GetMethod(nameof(JsonSerializer.Deserialize), new[] { typeof(string), typeof(Type) }); + static MethodInfo MethodJsonConvertSerializeObject = typeof(JsonSerializer).GetMethod(nameof(JsonSerializer.Serialize), new[] { typeof(object), typeof(Type), typeof(JsonSerializerOptions) }); +#else + static MethodInfo MethodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod(nameof(JsonConvert.DeserializeObject), new[] { typeof(string), typeof(Type) }); + + static MethodInfo MethodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod(nameof(JsonConvert.SerializeObject), new[] { typeof(object), typeof(JsonSerializerSettings) }); +#endif /// /// 当实体类属性为【对象】时,并且标记特性 [JsonMap] 时,该属性将以JSON形式映射存储 /// /// public static void UseJsonMap(this IFreeSql that) + { + UseJsonMap(that, +#if NETCORE30 + new JsonSerializerOptions() + +#else + new JsonSerializerSettings() +#endif + );} +#if NETCORE30 + public static void UseJsonMap(this IFreeSql that, JsonSerializerOptions settings) +#else + public static void UseJsonMap(this IFreeSql that, JsonSerializerSettings settings) +#endif + { if (_isAoped == false) - lock(_isAopedLock) + lock (_isAopedLock) if (_isAoped == false) { _isAoped = true; @@ -46,7 +69,13 @@ namespace FreeSql.Extensions { return Expression.IfThenElse( Expression.TypeEqual(valueExp, e.Property.PropertyType), - Expression.Return(returnTarget, Expression.Call(MethodJsonConvertSerializeObject, Expression.Convert(valueExp, typeof(object))), typeof(object)), + Expression.Return(returnTarget, Expression.Call(MethodJsonConvertSerializeObject, +#if NETCORE30 + Expression.Convert(valueExp, typeof(object)), Expression.Constant(valueExp.Type), Expression.Constant(settings)) +#else + Expression.Convert(valueExp, typeof(object)), Expression.Constant(settings)) +#endif + , typeof(object)), elseExp); }); } @@ -54,5 +83,6 @@ namespace FreeSql.Extensions }); } } + } }