如何<int>从对象输出 List 的值。(不是对象列表)C#



我从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列表或每组参数实现不同的验证逻辑,那么在这里使用反射是一个非常糟糕的主意。

如果你能提供更多的细节或清楚地说明这些参数的含义,你需要验证什么,以及你打算使用这些参数做什么,我们可能能够给你一个更好的解决方案。

最新更新