【问题标题】:Read from json file into IEnumerable using System.Text.Json使用 System.Text.Json 从 json 文件读取到 IEnumerable
【发布时间】:2022-01-03 18:18:55
【问题描述】:

使用 System.Text.Json 在 C# 中从 json 读取到 IEnumerable 时遇到问题...

这是错误:

System.Text.Json.JsonException: The JSON value could not be converted to System.Collections.Generic.Dictionary`2[System.String,System.String[]]. Path: $ | LineNumber: 0 | BytePositionInLine: 1.

以下几行包含我的代码:

private static Dictionary<string, string[]>? GetStaticMedicalAdvisors()
{
    // TODO - read from json
    // TODO - convert to contact
    // TODO - add contacts to list
    // TODO - DO NOT USE NEWTONSOFT.JSON (use System.Text.Json)
    // TODO - return list

    var json = System.IO.File.ReadAllText("MedicalAdvisors.json");
    var dict = JsonSerializer.Deserialize<Dictionary<string, String[]>>(json);

    return dict;
}  

这是我的MedicalAdvisors.json

[
  {
    "name": "Franz Immer",
    "endpoint": "000",
    "country": "CH"
  },
  {
    "name": "Nathalie Krügel",
    "endpoint": "000",
    "country": "CH"
  }
]

【问题讨论】:

  • 查看一小部分 MedicalAdvisors.json 样本可能会有所帮助。
  • 这就是字典的 json 表示形式 的样子。您文件中的数据是否遵循此模式? {"key1":["a","b","c"],"key2":["d","e","f"],"key3":["g","h","i"]}
  • @benjamin 我编辑了问题。
  • @Crowcoder 是的,看看我的 json 文件,我刚才将它添加到我的问题中。
  • 不,看起来不一样。你有一个项目数组,而不是字典。

标签: c# json type-conversion system.text.json


【解决方案1】:

您的 json 将反序列化为:
var result = JsonSerializer.Deserialize&lt;Dictionary&lt;string,string&gt;[]&gt;(json);

但是,创建一个与结构匹配的 Type 不是更有用吗?

public class UserInfo
{
    public string name { get; set; }
    public string endpoint { get; set; }
    public string country { get; set; }
}

var result = JsonSerializer.Deserialize<UserInfo[]>(json);

【讨论】:

  • 是的,我已经有一个完全一样的课程了。
  • 但是现在我会大摇大摆地得到一个空字符串....
  • 您的问题缺乏上下文,无法知道 Swagger 与它有什么关系。
  • 啊,我修好了,非常感谢用户信息的提示,我会接受你的问题,也许你可以对整个问题投赞成票,因为互联网上没有太多教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 2015-01-20
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多