not ready for ef core 3 yet but allowing aspnet core 3

This commit is contained in:
David Lebee
2019-10-13 14:06:47 -05:00
parent a74b635332
commit c300906c5e
17 changed files with 90 additions and 18 deletions
@@ -1,81 +0,0 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PoweredSoft.DynamicQuery.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace PoweredSoft.DynamicQuery.AspNetCore.Json
{
public class DynamicQueryJsonConverter : JsonConverter
{
public override bool CanRead => true;
public override bool CanWrite => false;
private Type[] DynamicQueryTypes { get; } = new Type[]
{
typeof(IFilter),
typeof(ISimpleFilter),
typeof(ICompositeFilter),
typeof(IAggregate),
typeof(ISort),
typeof(IGroup),
typeof(IQueryCriteria),
typeof(IQueryHandler)
};
public IServiceProvider ServiceProvider { get; }
public DynamicQueryJsonConverter(IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
}
public override bool CanConvert(Type objectType) => objectType.IsInterface && DynamicQueryTypes.Contains(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
return (object)null;
if (objectType == typeof(IFilter))
{
var jo = JObject.Load(reader);
bool isComposite = false;
if (jo.ContainsKey("type"))
{
isComposite = jo.GetValue("type").Value<string>()
.Equals("composite", StringComparison.OrdinalIgnoreCase);
}
else if (jo.ContainsKey("Type"))
{
isComposite = jo.GetValue("Type").Value<string>()
.Equals("composite", StringComparison.OrdinalIgnoreCase);
}
else
{
throw new Exception("IFilter should have a type property..");
}
var filterObj = ServiceProvider.GetService(isComposite ? typeof(ICompositeFilter) : typeof(ISimpleFilter));
var filterType = filterObj.GetType();
filterObj = jo.ToObject(filterType, serializer);
return filterObj;
}
var obj = ServiceProvider.GetService(objectType);
if (obj == null)
throw new JsonSerializationException("No object created.");
serializer.Populate(reader, obj);
return obj;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
}
@@ -1,7 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json.Converters;
using PoweredSoft.Data;
using PoweredSoft.DynamicQuery.AspNetCore.Json;
using System;
using System.Collections.Generic;
using System.Text;
@@ -14,12 +12,6 @@ namespace PoweredSoft.DynamicQuery.AspNetCore
{
builder.Services.AddPoweredSoftDataServices();
builder.Services.AddPoweredSoftDynamicQuery();
var serviceProvider = builder.Services.BuildServiceProvider();
builder.AddJsonOptions(o =>
{
o.SerializerSettings.Converters.Add(new StringEnumConverter());
o.SerializerSettings.Converters.Add(new DynamicQueryJsonConverter(serviceProvider));
});
return builder;
}
}
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp3.0</TargetFramework>
<Copyright>Powered Softwares Inc.</Copyright>
<PackageLicenseUrl>MIT</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/PoweredSoft/DynamicQuery</PackageProjectUrl>
@@ -19,8 +19,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0" />
</ItemGroup>
<ItemGroup>