c# - 加载 JSON 文件会出现序列化错误

标签 c# json

我有以下 JSON 文件,

[
  {
    "applicationConfig": {
      "Name": "Name1",
      "Site": "Site1"
    },
    "pathConfig": {
      "SourcePath": "C:\\Temp\\Outgoing1",
      "TargetPath": "C:\\Files"
    },
    "credentialConfig": {
      "Username": "test1",
      "password": "super1"
    }
  },
  {
    "applicationConfig": {
      "Name": "Name2",
      "Site": "Site2"
    },
    "pathConfig": {
      "SourcePath": "C:\\Temp\\Outgoing2",
      "TargetPath": "C:\\Files"
    },
    "credentialConfig": {
      "Username": "test2",
      "password": "super2"
    }
  }
]

下面是 C# 类结构,

public class Configurations
{
    public List<ApplicationConfig> ApplicationConfigs { get; set; }
    public List<PathConfig> PathConfigs { get; set; }
    public List<CredentialConfig> CredentialConfigs { get; set; }
}


public class ApplicationConfig
{
    public string Name { get; set; }
    public string Site { get; set; }
}

public class PathConfig
{
    public string SourcePath { get; set; }
    public string TargetPath { get; set; }
}

public class CredentialConfig
{
    public string Username { get; set; }
    public string password { get; set; }
}

现在尝试加载 JSON 并出现以下错误,

using (var streamReader = new StreamReader(@"./Config.json"))
        {
           var X = JsonConvert.DeserializeObject<Configurations>(streamReader.ReadToEnd());
        }

$exception {"Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'ConsoleApp8.Configurations' because the type requires a JSON object (e.g. {\"name\":\"value\"}) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON object (e.g. {\"name\":\"value\"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.\r\nPath '', line 1, position 1."} Newtonsoft.Json.JsonSerializationException

我还需要序列化什么?

最佳答案

您的 JSON 表示一个数组 - 虽然结束 [ 应该是一个 ]。但是您正在尝试将其序列化为单个 Configurations 对象。此外,您似乎期望应用程序配置、路径配置和凭据配置使用单独的数组 - 而您的 JSON 显示一个对象数组,每个对象都包含这三个。

我怀疑你想要:

public class Configuration
{
    [JsonProperty("applicationConfig")]
    ApplicationConfig ApplicationConfig { get; set; }

    [JsonProperty("pathConfig")]
    PathConfig PathConfig { get; set; }

    [JsonProperty("credentialConfig")]
    CredentialConfig CredentialConfig { get; set; }
}

// Other classes as before, although preferably with the password property more conventionally named

然后使用:

List<Configuration> configurations = 
    JsonConvert.DeserializeObject<List<Configuration>>(streamReader.ReadToEnd());

然后您将获得一个配置对象列表,每个配置对象都将包含三个“子配置”部分。

关于c# - 加载 JSON 文件会出现序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755025/

相关文章:

c# - 定义类型为 void 的类属性(不是方法)

c# - 命名管道 C# 客户端无法连接到 C++ 服务器

c# - 如何与多个 ViewModel 共享多个 ObservableCollection?

python - 将从 REST api 检索到的数据存储到 python 中的变量中

java - Spring Boot RabbitMQ 接收器 Jackson 反序列化为 POJO

c# - 如何在 C# dll 中保留对象 “persistent”?

c# - 我如何判断我的 Controller 操作是否被另一个 Controller 操作调用?

json - 从 json 主体访问键的值

mysql - JacksonMapping Exception::HttpMessageNotWritableException:无法写入内容:(是 java.lang.NullPointerException)

python - 如何使用 Flask 提供 HTML 和 JSON 内容?