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

zi8p0yeb  于 2023-04-08  发布在  C#
关注(0)|答案(2)|浏览(167)

我从一个json文件中输入信息,然后需要检查信息是否正确。我不知道如何从对象中打印出List的值。不是所有对象都有相同的属性,我还附加了我的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语句来遍历所有这些参数,但这是一个很大的代码。请帮助。

z9ju0rcb

z9ju0rcb1#

如果你只想在屏幕上显示所有数据,最简单的方法是

var jsonResults = JsonConvert.DeserializeObject<List<Parameters>>(jsonFile);

    var json = JsonConvert.SerializeObject(jsonResults, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    })

    Console.WriteLine(json);
zxlwwiss

zxlwwiss2#

首先,这里有一个解决你的问题的方法:

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列表或每组参数实现不同的验证逻辑,在这里使用反射是一个非常糟糕的想法。
如果您能提供更多的细节或说明这些参数的含义,您需要验证什么,以及您打算使用这些参数的目的,我们可能能够为您提供更好的解决方案。

相关问题