我从json文件输入信息,然后需要检查信息是否正确。我不确定如何从对象中打印出列表的值。并非所有对象都具有相同的属性,我还附加了json文件。下面是我的代码:
public Parameters()
{
public List<int> ShortPeriodData { get; set; }
public List<int> LongPeriodData { get; set; }
public List<int> UponTriggerData { get; set; }
public string LogRecordType { get; set; }
public int? PowerVariance { get; set; }
public List<double> BatteryData { get; set; }
public List<int> MeanData { get; set; }
public List<int> MeanVariance{ get; set; }
public int? PowerMean{ get; set; }
public string TriggerType{ get; set; }
}
public main()
{
string jsonFile = File.ReadAllText(path);
var jsonResults = JsonConvert.DeserializeObject<List<Parameters>>(jsonFile);
foreach (var result in jsonResults)
{
foreach (PropertyInfo prop in result.GetType().GetProperties())
{
if (prop.GetValue(result, null) != null)
{
//Check to make sure the values are correct
}
}
}
}
json文件:
[
{
"ShortPeriodData ":[0,0,0,0]
},
{
"LongPeriodData":[0,0,0,0],
"UponTriggerData":[0,0,0,0],
"LogRecordType":"Power"
},
{
"PowerVariance":5
},
{
"BatteryData ":[0.7,0.3,1.4,5.7]
},
{
"MeanData":[65,71,81,89,98,95],
"MeanVariance":[8,4,4,3,8,5],
"PowerMean":64,
"TriggerType":"PowerUp"
}
]
这只是我从json文件中获得的数据的一个样本,实际上它是我正在读取的100个不同的参数。我不知道如何做一个简单的方法来循环和检查,以确保数据是正确的。我试着做一个switch语句来遍历它们,但那是很多代码。请帮助。
如果您只想在屏幕上显示所有数据,最简单的方法是
var jsonResults = JsonConvert.DeserializeObject<List<Parameters>>(jsonFile);
var json = JsonConvert.SerializeObject(jsonResults, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
})
Console.WriteLine(json);
首先,这是你的问题的解决方案:
void Main()
{
string jsonFile = File.ReadAllText(path);
var jsonResults = JsonConvert.DeserializeObject<List<Parameters>>(jsonFile);
foreach (var result in jsonResults)
{
// Filter the properties of the object by type to get our List<int>s
var intLists = result.GetType()
.GetProperties()
.Where(x => x.PropertyType == typeof(List<int>))
.ToList();
foreach (var intList in intLists)
{
// Attempt a safe cast with the "is" operator, which returns true if the
// cast succeeds and the result is not null
if (intList.GetValue(result) is List<int> list)
{
Console.WriteLine($"{intList.Name}: {string.Join(',', list)}");
}
}
}
}
虽然该解决方案将允许您从每个Parameters
对象中打印出每个List<int>
属性的内容,但完全不清楚您打算如何"检查信息是否正确"。如果您需要为每个int列表或每组参数实现不同的验证逻辑,那么在这里使用反射是一个非常糟糕的主意。
如果你能提供更多的细节或清楚地说明这些参数的含义,你需要验证什么,以及你打算使用这些参数做什么,我们可能能够给你一个更好的解决方案。