【问题标题】:Deserialize appsettings.json with ASP.NET Core使用 ASP.NET Core 反序列化 appsettings.json
【发布时间】:2017-06-07 18:46:00
【问题描述】:

我正在我的 ASP.NET 应用程序中对我的 appsettings.json 文件进行加密/解密。

解密后,我的文件正确解密为以下字符串:



{
  "ConnectionStrings": {
    "IdentityServer4": "server=(localdb)\\mssqllocaldb;database=IdentityServer4.Quickstart.EntityFramework;trusted_connection=yes"
  }
}

我现在想将该结果转换为一个对象,我尝试使用以下代码行:

dynamic result = JsonConvert.DeserializeObject(jsonString);

当该行执行时,我收到以下错误:

"Unexpected character encountered while parsing value: . Path '', line 0, position 0."

【问题讨论】:

  • 您是否记录了 jsonString 变量以验证它是否包含有效的 JSON?
  • 字符串的开头可能有一个BOM。如果是这样,请参阅 here 以获取有关如何解决的建议。
  • @dbc,你是绝对正确的。做jsonString = jsonString.Trim(new char[] { '\uFEFF', '\u200B' }); 解决了这个问题。请提交答案,以便我接受。

标签: c# asp.net json asp.net-core


【解决方案1】:

字符串的开头似乎有一个Byte Order Mark

要剥离 BOM,请参阅this question 的答案。

但是,最好不要将它包含在开头的字符串中。如果您有一个包含 BOM 的字节数组并执行以下操作:

var jsonString = Encoding.UTF8.GetString(byteArray);

然后将包含 BOM。但是,如果您使用StreamReader 读取二进制数据,那么 BOM 将被处理并删除:

var jsonString = new StreamReader(new MemoryStream(byteArray)).ReadToEnd();

(如果您愿意,可以在其中添加 using 语句,尽管 MemoryStream 实际上并不需要处理。)

或者,按照this answer(用于 XML)和this one(用于 JSON 的同时解压缩和反序列化)的方式同时进行流式传输、解密和反序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多