无法创建“System.String”类型的实例

Posted

技术标签:

【中文标题】无法创建“System.String”类型的实例【英文标题】:Cannot create instance of type 'System.String' 【发布时间】:2018-05-25 18:31:34 【问题描述】:

我尝试从 appsettings.json 获取我的部分,然后将其绑定到 MongoSettings 类的实例,但我有一个例外:

“无法创建'System.String'类型的实例,因为它丢失了 一个公共的无参数构造函数。”

很奇怪,因为我是用同样的方法来获取jwt设置的。

请看一下:

    var jwtSettings = Configuration.GetSection("jwt").Get<JwtSettings>(); //it works
    var mongoSettings = Configuration.GetSection("mongo").Get<MongoSettings>(); //it doesn't

appsettings.json

  "Jwt": 
    "issuer" : "localhost:5000",
    "expiryMinutes" : 60,
    "key" : "das#@4SD120847@12313"
  ,
  "Mongo": 
    "connection:" : "mongodb://localhost:27017",
    "database" : "MemoTime"
  

Mongo 设置:

public class MongoSettings

    public string Connection  get; set; 
    public string Database  get; set; 

Jwt设置:

public class JwtSettings

    public string Key  get; set; 
    public string ValidIssuer  get; set; 
    public int ExpiryMinutes  get; set; 

如您所见,应用设置中的类和部分看起来相似,那么为什么获取 mongo 的设置不起作用?

【问题讨论】:

"issuer" : "localhost:5000", public string ValidIssuer get; set; ? 哦...你说得对,我错过了。但其余属性已正确绑定 : 不能存在于键名中的任何位置。 【参考方案1】:

你的问题是在 Json 中有额外的冒号“:”,这就是它给出错误的原因

有效的 Json 数据。

"Jwt": 
  
    "issuer": "localhost:5000",
    "expiryMinutes": 60,
    "key": "das#@4SD120847@12313"
  ,
  "Mongo": 
  
    "connection": "mongodb://localhost:27017",
    "database": "MemoTime"
  

【讨论】:

你是对的。现在它起作用了。我怎么会错过它……?谢谢:) 这是一个什么样的项目?我尝试了 .NET 核心控制台应用程序并添加了 Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json 但发生错误:'IConfigurationSection' 不包含“Get”的定义,并且没有扩展方法“Get”接受“IConfigurationSection”类型的第一个参数' 可以找到. 这个 asp.net 核心网络应用程序 谢谢。我发现它是一个 ASP.NET MVC 项目。一个空的 ASP.NET 核心 Web 应用程序仍然无法找出 Get&lt;T&gt; 方法。这个方法其实是在Microsoft.Extensions.Configuration.ConfigurationBinderMicrosoft.Extensions.Configuration.Binder.dll中声明的。 查看该项目中的启动类,您可以看到 ConfigureServices 方法,我们将在其中编写用于从 appsettings.json 文件读取数据的代码

以上是关于无法创建“System.String”类型的实例的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型为“System.DateTime”的对象强制转换为类型“System.String”

无法创建通用字典...有时

无法将对象类型“System.String[*]”转换为“System.String[]”

Microsoft.Data.SqlClient.SqlBuffer 无法将“System.String”类型的对象转换为“System.Guid”类型

无法在 DataReader.GetString() 中将“System.Int32”类型的对象转换为“System.String”类型

无法将类型“System.String”的对象转换为类型“System.Byte []”错误 MYSQL NET CORE 3.1