如何将 appsettings.json 部分转换为动态,然后在 C# 中转换为类对象

问题描述 投票:0回答:1

我有一个应用程序设置:

"testData": [
    {
      "target": "MarketMirrorClient.GetContests",
      "mockData": [
        {
          "request": {
            "contestKeys": [ "testContestKey1" ]
          },
          "response": {
            "contests": [
              {
                "contestKey": "testContestKey1",
                "contestType": "football",
                "contestStatus": "InPlay"
              }
            ]
          }
        },
        {
          "request": {
            "contestKeys": [ "testContestKey2" ]
          },
          "response": {
            "contests": [
              {
                "contestKey": "testContestKey2",
                "contestType": "soccer",
                "contestStatus": "PreGame"
              }
            ]
          }
        }
      ]
    }
  ]

我将 testData.mockData.request 序列化为字典。但是,当我尝试将检索到的对象从字典转换为特定类型时,它会抛出一个异常,表示需要实现 IConvertible,例如

builder.Services.Configure(“testData”);

型号有:


public class MockTestData
{
    public List<TestData> TestData { get; set; } = new();
}

public class TestData
{
    public string Target { get; set; }
    public List<MockData> MockData { get; set; } = new();
}

public class MockData
{
    public Dictionary<string, object> Request { get; set; }
    public object Response { get; set; }
}

我应该在哪里实现 IConvertible?

我尝试将类型从对象更改为动态或 ExpandoObject,但错误是需要实现 IConvertible 或无法将对象转换为我要转换为的“任何”类型,即列表

c# .net-core appsettings
1个回答
0
投票

这对我有用

List<TestDatum> testData = configuration.GetSection("testData").Get<List<TestDatum>>();


public class TestDatum
{
    public string target { get; set; }
    public List<MockDatum> mockData { get; set; }
}

public class Contest
{
    public string contestKey { get; set; }
    public string contestType { get; set; }
    public string contestStatus { get; set; }
}

public class MockDatum
{
    public Request request { get; set; }
    public Response response { get; set; }
}

public class Request
{
    public List<string> contestKeys { get; set; }
}

public class Response
{
    public List<Contest> contests { get; set; }
}

© www.soinside.com 2019 - 2024. All rights reserved.