【问题标题】:Converting two-dimensional array to an object c#将二维数组转换为对象c#
【发布时间】:2013-12-13 02:25:43
【问题描述】:

这一切都源于查询 Google Analytics(分析)数据。对于基本查询,改变的主要因素是 dimensionsmetrics。返回的对象是一种称为 GaData 的类型,您需要的实际结果位于 GaData.Rows 中。

GaData.Rows 的格式如下:

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

到目前为止,我的班级设置如下:

public class Results
{
    public List<Dimension> Dimensions { get; set; }
}

public class Dimension
{
    public string Value { get; set; }
    public List<Metric> Metrics { get; set; }
}

public class Metric
{
    public int Value { get; set; }
}

最后,也许它只是晚了,我的大脑运转不正常,但我在将这些数据转换为 Results 类型时遇到了一点困难,我认为是因为多层。有什么帮助吗?

编辑

我在下面添加了一个答案,说明我最终是如何完成它的,如果有人有更简洁的示例,请告诉我!

【问题讨论】:

    标签: c# class object google-analytics deserialization


    【解决方案1】:

    嗯,我不知道RowsGa 里面是什么,但也许这会给你指明正确的方向。

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

    【讨论】:

    • 有帮助,但我不知道我是否可以使用 LINQ 完成我需要的工作,因为我需要知道某些行的索引,请参阅我的答案。
    【解决方案2】:

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

        public static Results ToDimensionResults(this GaData ga)
        {
            var results = new Results();
            var dimensions = new List<Dimension>();
            List<Metric> 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<Metric>();
    
                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;
        }
    

    【讨论】:

    • 我会的,这让我等到明天...... :)
    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2015-10-22
    • 2010-11-20
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多