System.Text.Json转换器获取整个字符串对象

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)

Und*_*Emo 7

看起来这个有效

 using (var jsonDocument = JsonDocument.ParseValue(ref reader))
        {
            var jsonText = jsonDocument.RootElement.GetRawText();
        }
Run Code Online (Sandbox Code Playgroud)

来源