【发布时间】:2022-01-13 23:18:56
【问题描述】:
因此,我的 NewtonJson 自定义转换器无法与 body api 调用一起使用。 (默认使用 System.Text.Json 进行转换)。
所以目前我有一个临时解决方案来编写一些包装器,这些包装器最终会调用 Newtonjson,直到 text.json 转换器被编写和测试。
我想要做的是将整个对象作为字符串读取并将其传递给牛顿转换器
我的 StartUp.cs
services.AddControllers(options =>
options.Filters.Add<ApiExceptionFilterAttribute>())
.AddFluentValidation(x => x.AutomaticValidationEnabled = false)//ValidationBehaviour handle fluent validations.
.AddJsonOptions(x =>
{
x.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
x.JsonSerializerOptions.Converters.Add(new SystemModelConverter());
x.JsonSerializerOptions.IgnoreNullValues = true;
});
我的转换器类
public class SystemModelConverter : JsonConverter<ISystemModel>
{
public override bool CanConvert(Type typeToConvert)
{
return (typeToConvert.GetInterface(typeof(ISystemModel).Name) != null);
}
public override ISystemModel Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var value = new StringBuilder();
while(reader.Read())
{
var str = reader.GetString();
value.Append(str);
}
//passing the string along
return Newtonsoft.Json.JsonConvert.DeserializeObject(value.ToString(), CoreExtensions.GetJsonSerializerSettings()) as ISystemModel;
}
public override void Write(Utf8JsonWriter writer, ISystemModel value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
【问题讨论】:
-
body api 调用是什么意思?根据您使用的技术,您可能会更换序列化程序?
-
我怀疑您尝试从
Utf8JsonReader提取原始 JSON 字符串以传递给您的 Newtonsoft 转换器所花费的时间比重写您的 Newtonsoft 转换器所花费的时间更多。
标签: c# json .net system.text.json