Und*_*Emo 2 .net c# json system.text.json
所以我遇到的情况是我的 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;
});
Run Code Online (Sandbox Code Playgroud)
我的转换器类
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();
}
Run Code Online (Sandbox Code Playgroud)
看起来这个有效
using (var jsonDocument = JsonDocument.ParseValue(ref reader))
{
var jsonText = jsonDocument.RootElement.GetRawText();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |