C# 如何绑定此json并读取特定的键值

C# 如何绑定此json并读取特定的键值,c#,asp.net-core,C#,Asp.net Core,我有下面的json,我想在列表中阅读它。下面是定义的类和模型以及我试图阅读的代码。我在绑定时得到空值。我不知道我该如何做到这一点。例如,如果我有多个规则,我希望根据传递的条件来读取每个规则。请参阅我的上一个示例代码,以便更好地理解 示例Json: {"TableStorageRule": { "Rules": [ { "Name": "filterRule1", "DataFilter&qu

我有下面的json,我想在列表中阅读它。下面是定义的类和模型以及我试图阅读的代码。我在绑定时得到空值。我不知道我该如何做到这一点。例如,如果我有多个规则,我希望根据传递的条件来读取每个规则。请参阅我的上一个示例代码,以便更好地理解

示例Json:

{"TableStorageRule": { "Rules": [ {
    "Name": "filterRule1",
    "DataFilter":
    {
      "DataSetType": "Settings1"

    },
    "TableSettings":
    {
      "AzureTable": {
        "Account": "account1",
        "Table": "table1",
        "Key": "key1"
      },
      "SchemaBaseUri": "https://test.web.core.windows.net/"
    }

  },
  {
    "Name": "filterRule2",
    "DataFilter":
    {
      "DataSetType": "Settings2"

    },
    "TableSettings":
    {
      "AzureTable": {
        "Account": "account2",
        "Table": "table2",
        "Key": "key2"
      },
      "SchemaBaseUri": "https://test2.web.core.windows.net/"
    }

  }
  
  
]  }}
型号和代码:

public class TableStoreSettings
{
    public class AzureTableSettings
    {
        public string Account { get; set; }
        public string Key { get; set; }
        public string Table { get; set; }
    }

    public AzureTableSettings AzureTable { get; set; }

    public Uri SchemaBaseUri { get; set; }
}

public class TableStorageRule
{
    public string Name { get; set; }
    public TwisterDataFilter DataFilter { get; set; }
    public TableStoreSettings TableSettings { get; set; }
}

public class TableStorageConfiguration
{
    public IEnumerable<TableStorageRule> Rules { get; set; } = new List<TableStorageRule>();
}

在上面,我只得到第一个filtername1,没有得到其他filternames等等…尽管在GetSection()上,我在quick watch中看到了所有值。

这是JSON文件中的正确模型:

public class DataFilter    {
    public string DataSetType { get; set; } 
}

public class AzureTable    {
    public string Account { get; set; } 
    public string Table { get; set; } 
    public string Key { get; set; } 
}

public class TableSettings    {
    public AzureTable AzureTable { get; set; } 
    public string SchemaBaseUri { get; set; } 
}

public class Rule    {
    public string Name { get; set; } 
    public DataFilter DataFilter { get; set; } 
    public TableSettings TableSettings { get; set; } 
}

public class TableStorageRule    {
    public List<Rule> Rules { get; set; } 
}

public class Root    {
    public TableStorageRule TableStorageRule { get; set; } 
}
公共类数据过滤器{
公共字符串数据集类型{get;set;}
}
公共类AzureTable{
公共字符串帐户{get;set;}
公共字符串表{get;set;}
公共字符串密钥{get;set;}
}
公共类表设置{
公共AzureTable AzureTable{get;set;}
公共字符串SchemaBaseUri{get;set;}
}
公共阶级规则{
公共字符串名称{get;set;}
公共数据筛选器数据筛选器{get;set;}
公共表设置表设置{get;set;}
}
公共类表存储管理器{
公共列表规则{get;set;}
}
公共类根{
公共表存储规则表存储规则{get;set;}
}
对于测试,您可以读取JSON文件并获取值(也许更改模型可以解决代码中的问题):

string json=File.ReadAllText(jsonFilePath);
根myDeserializedClass=JsonConvert.DeserializeObject(json);

看起来像是在“tabletoragerule”json中有“Rules”,这是一个tabletoragerule类型的数组。你在装订时错过了这个。我想是的。。你能具体说明一下,我该如何解决这个问题吗?我现在的做法是.net核心的做法..我无法解决这个问题,尽管我知道我在哪里犯了错误。我想用我最初提到的方法进行测试,你可以用我的代码阅读文件。此外,您的模型与JSON文件不匹配。
public class DataFilter    {
    public string DataSetType { get; set; } 
}

public class AzureTable    {
    public string Account { get; set; } 
    public string Table { get; set; } 
    public string Key { get; set; } 
}

public class TableSettings    {
    public AzureTable AzureTable { get; set; } 
    public string SchemaBaseUri { get; set; } 
}

public class Rule    {
    public string Name { get; set; } 
    public DataFilter DataFilter { get; set; } 
    public TableSettings TableSettings { get; set; } 
}

public class TableStorageRule    {
    public List<Rule> Rules { get; set; } 
}

public class Root    {
    public TableStorageRule TableStorageRule { get; set; } 
}
string json = File.ReadAllText(jsonFilePath);
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(json);