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