将二维数组转换为对象c#

这一切都源于查询Google Analytics数据。 对于基本查询,更改的主要因素是维度指标 。 返回的对象是一个名为GaData的类型,您需要的实际结果驻留在GaData.Rows中。

GaData.Rows的格式如下所示:

行

每个维度首先会有一行,在此示例中,“新访问者”有一行,“返回访问者”有第二行。 在这些行中,将包含另一组包含Dimension值的行,然后是您指定的每个度量标准(我只要求一个度量标准)。

到目前为止,我的课程设置如下:

public class Results { public List Dimensions { get; set; } } public class Dimension { public string Value { get; set; } public List Metrics { get; set; } } public class Metric { public int Value { get; set; } } 

最后,也许它刚刚晚了,我的大脑function不好,但我将这些数据转换为Results类型有点困难,我认为是因为多层。 有帮助吗?

编辑

我在下面添加了一个答案,我最终完成了它,如果有人有一个更浓缩的例子让我知道!

好吧,我不知道Ga里面有什么Rows ,但也许这会指出你正确的方向。

 var results = GaData.Rows.Select(x => x.Rows.Select(y => new Dimension { Value = y.Value, Metrics = new List {innerRow.Metric}})); 

我最终为GaData创建了一个名为ToDimensionResults()的扩展方法。 我不确定我是否能够使用LINQ完成此操作,因为我需要知道某些行的索引(如Dimension Value)。 因此,我选择循环遍历维度和指标,并手动创建类。 注意:如果您在查询中未包含维度,则结果不包含维度值,只包含度量列表,因此这可以适应这种可能性。

  public static Results ToDimensionResults(this GaData ga) { var results = new Results(); var dimensions = new List(); List metrics; var value = ""; var metricStartIndex = 1; for (var i = 0; i < ga.Rows.Count; i++) { //accomodate data without dimensions if (!string.IsNullOrEmpty(ga.Query.Dimensions)) { value = ga.Rows[i][0].ToString(); } else { value = ""; metricStartIndex = 0; } metrics = new List(); for (var x = metricStartIndex; x < ga.Rows[i].Count; x++) { metrics.Add(new Metric { Value = Convert.ToInt32(ga.Rows[i][x]) }); } dimensions.Add(new Dimension { Value = value, Metrics = metrics }); } results.Dimensions = dimensions; return results; }