首页 > 其他分享 >APS.NET Core 6.0Json任何类型读取到字符串属性The JSON value could not be converted to System.String.

APS.NET Core 6.0Json任何类型读取到字符串属性The JSON value could not be converted to System.String.

时间:2023-02-15 19:24:41浏览次数:41  
标签:Core String APS could System value Json 字符串 读取

在升级.netsdk到6.0版本后出现The JSON value could not be converted to System.String.原因是我代码定义的类型是string,但是传参的时候写了int,

  public override void ConfigureServices(ServiceConfigurationContext context)
        {
            //重写Json非字符串读取到对象字符串属性
            context.Services.AddMvc().AddJsonOptions(opts =>
            {
                var stringConverter = new StringConverter();
                opts.JsonSerializerOptions.Converters.Add(stringConverter);
            });
       }

新建stringConverter类
///


/// Json任何类型读取到字符串属性
/// 因为 System.Text.Json 必须严格遵守类型一致,当非字符串读取到字符属性时报错:
/// The JSON value could not be converted to System.String.
///

public class StringConverter : System.Text.Json.Serialization.JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {

        if (reader.TokenType == JsonTokenType.String)
        {
            return reader.GetString();
        }
        else
        {//非字符类型,返回原生内容
            return GetRawPropertyValue(reader);
        }

        throw new JsonException();
    }

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value);
    }
    /// <summary>
    /// 非字符类型,返回原生内容
    /// </summary>
    /// <param name="jsonReader"></param>
    /// <returns></returns>
    private static string GetRawPropertyValue(Utf8JsonReader jsonReader)
    {
        ReadOnlySpan<byte> utf8Bytes = jsonReader.HasValueSequence ?
        jsonReader.ValueSequence.ToArray() :
        jsonReader.ValueSpan;
        return Encoding.UTF8.GetString(utf8Bytes);
    }
}

标签:Core,String,APS,could,System,value,Json,字符串,读取
From: https://www.cnblogs.com/drivertobolin/p/17124387.html

相关文章

  • .net core 微服务之API网关 (Ocelot)
    网关为什么要使用网关1、聚合微服务增多,导致客户端不好维护2、聚合微服务进行集群​    2.1增加和修改聚合微服务集群,都要修改客户端,导致客户端不稳定​  ......
  • .net core 微服务之 Ocelot 集成 IdentityServer4
    为什么集成在Ocelot中在上一篇文章中,我们并没有将认证授权集成在Ocelot中,在生产环境中,如果我们每个服务都添加了认证授权,那么在实际部署中肯定会生成很多的配置,就会相对于......
  • CentOS里配置.net core运行环境
    CentOS里配置.netcore运行环境(含后台运行,附ssh长连接)说明:2带了4(vs2017仅支持2.1,命令中修改版本就好)另外,2.1、3.1等版本可以共存,不影响使用1注册Microsoft......
  • .Net6 WebApi中集成FluentValidation.AspNetCore的用法
    一、首先在nuget管理器中添加FluentValidation.AspNetCore包 二、添加验证类并继承AbstractValidator<T>,T为原始参数类,在验证类的构造函数中添加验证内容  三、......
  • kubenetes core-dns安装和配置(1.10.13)
    前言:kubernetes把所有的插件统一放在了.../cluster/addons下了从早期的发布的版本看到,2015年1月, kubernetes0.8.x系列版本中.../cluster/addons目录被加入进来.addo......
  • CentOS中部署jar包时提示:org.quartz.SchedulerException: Couldn‘t get host name
    场景jar包在本地Windows系统上运行不报错,在CentOS服务器上运行时提示:org.quartz.SchedulerException:Couldn'tgethostname 注:​​关注公众号霸道的程序猿获取编程......
  • .Net Core(.Net6)创建grpc
    1.环境要求.Net6,VisualStudio2019以上官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/grpc/grpc-startNetFramework版本:https://www.cnblo......
  • .Net Core(.Net6)创建grpc
    1.环境要求.Net6,VisualStudio2019以上官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/grpc/grpc-startNetFramework版本:https://www.cnblog......
  • ARC120C Swaps 2 题解
    好难啊,会也不会设\(a_i=x,a_{i+1}=y\),那么交换后\(a_i=y+1,a_{i+1}=x-1\),发现交换后就是\(a_i+i\)和\(a_{i+1}+i+1\)这两个值进行了交换。那就把所有\(a_i\)变成......
  • AspNetCore基础课程
    AspNetCore基础课程我打算录制一个基础课程从原理、思维、实现等角度详细讲解。IOC、Options、Configuration、Logging、AOP、管道中间件、路由终结点,mvc的原理。掌握这些......