mirror of https://github.com/abpframework/abp.git
8 changed files with 157 additions and 72 deletions
@ -0,0 +1,44 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text.Json; |
||||
|
using System.Text.Json.Serialization; |
||||
|
using Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Models; |
||||
|
using Volo.Abp.Dapr; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Json; |
||||
|
|
||||
|
public class AbpDaprSubscriptionRequestConverter<T> : JsonConverter<AbpDaprSubscriptionRequest<T>> |
||||
|
where T : class |
||||
|
{ |
||||
|
private JsonSerializerOptions _readJsonSerializerOptions; |
||||
|
|
||||
|
private readonly IDaprSerializer _daprSerializer; |
||||
|
|
||||
|
public AbpDaprSubscriptionRequestConverter(IDaprSerializer daprSerializer) |
||||
|
{ |
||||
|
_daprSerializer = daprSerializer; |
||||
|
} |
||||
|
|
||||
|
public override AbpDaprSubscriptionRequest<T> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) |
||||
|
{ |
||||
|
_readJsonSerializerOptions ??= CreateJsonSerializerOptions(options); |
||||
|
|
||||
|
var rootElement = JsonDocument.ParseValue(ref reader).RootElement; |
||||
|
var obj = JsonSerializer.Deserialize<AbpDaprSubscriptionRequest<T>>(rootElement.GetRawText(), _readJsonSerializerOptions); |
||||
|
obj.Data = _daprSerializer.Deserialize(rootElement.GetProperty("data").GetRawText(), typeof(T)).As<T>(); |
||||
|
return obj; |
||||
|
} |
||||
|
|
||||
|
public override void Write(Utf8JsonWriter writer, AbpDaprSubscriptionRequest<T> value, JsonSerializerOptions options) |
||||
|
{ |
||||
|
throw new NotSupportedException(); |
||||
|
} |
||||
|
|
||||
|
private JsonSerializerOptions CreateJsonSerializerOptions(JsonSerializerOptions options) |
||||
|
{ |
||||
|
var newOptions = new JsonSerializerOptions(options); |
||||
|
newOptions.Converters.RemoveAll(x => x == this || x.GetType() == typeof(AbpDaprSubscriptionRequestConverterFactory)); |
||||
|
newOptions.PropertyNamingPolicy = new AbpDaprSubscriptionRequestJsonNamingPolicy(); |
||||
|
return newOptions; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
using System; |
||||
|
using System.Reflection; |
||||
|
using System.Text.Json; |
||||
|
using System.Text.Json.Serialization; |
||||
|
using Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Models; |
||||
|
using Volo.Abp.Dapr; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Json; |
||||
|
|
||||
|
public class AbpDaprSubscriptionRequestConverterFactory : JsonConverterFactory |
||||
|
{ |
||||
|
private readonly IDaprSerializer _daprSerializer; |
||||
|
|
||||
|
public AbpDaprSubscriptionRequestConverterFactory(IDaprSerializer daprSerializer) |
||||
|
{ |
||||
|
_daprSerializer = daprSerializer; |
||||
|
} |
||||
|
|
||||
|
public override bool CanConvert(Type typeToConvert) |
||||
|
{ |
||||
|
return typeToConvert.GetGenericTypeDefinition() == typeof(AbpDaprSubscriptionRequest<>); |
||||
|
} |
||||
|
|
||||
|
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) |
||||
|
{ |
||||
|
return (JsonConverter)Activator.CreateInstance( |
||||
|
typeof(AbpDaprSubscriptionRequestConverter<>).MakeGenericType(typeToConvert.GetGenericArguments()[0]), |
||||
|
BindingFlags.Instance | BindingFlags.Public, |
||||
|
binder: null, |
||||
|
new object[] { _daprSerializer }, |
||||
|
culture: null)!; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
using System.Text.Json; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Json; |
||||
|
|
||||
|
public class AbpDaprSubscriptionRequestJsonNamingPolicy : JsonNamingPolicy |
||||
|
{ |
||||
|
public override string ConvertName(string name) |
||||
|
{ |
||||
|
return name.ToLower(); |
||||
|
} |
||||
|
} |
||||
@ -1,8 +1,11 @@ |
|||||
namespace Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Models; |
namespace Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.Models; |
||||
|
|
||||
public class AbpAspNetCoreMvcDaprSubscriptionRequest |
public class AbpDaprSubscriptionRequest<T> |
||||
|
where T : class |
||||
{ |
{ |
||||
public string PubSubName { get; set; } |
public string PubSubName { get; set; } |
||||
|
|
||||
public string Topic { get; set; } |
public string Topic { get; set; } |
||||
|
|
||||
|
public T Data { get; set; } |
||||
} |
} |
||||
Loading…
Reference in new issue