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

将二维数组转换为对象c#,c#,class,object,google-analytics,deserialization,C#,Class,Object,Google Analytics,Deserialization,这一切都源于查询谷歌分析数据。对于基本查询,更改的主要因素是维度和度量。返回的对象类型为GaData,您需要的实际结果位于GaData.Rows中 GaData.Rows的格式如下所示: 每个维度首先有一行,在本例中,有一行表示“新访客”,第二行表示“返回访客”。在这些行中,将包含另一组包含维度值的行,然后是您指定的每个度量(我只要求一个度量) 到目前为止,我的课程设置如下: public class Results { public List<Dimension> Dim

这一切都源于查询谷歌分析数据。对于基本查询,更改的主要因素是维度和度量。返回的对象类型为GaData,您需要的实际结果位于GaData.Rows中

GaData.Rows的格式如下所示:

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

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

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; }
}
公共类结果
{
公共列表维度{get;set;}
}
公共类维度
{
公共字符串值{get;set;}
公共列表度量{get;set;}
}
公共类度量
{
公共int值{get;set;}
}
最后,可能是时间晚了,我的大脑功能不好,但我觉得把这些数据转换成
结果
类型有点困难,我想是因为有多个层次。有什么帮助吗

编辑


我在下面添加了一个关于我是如何完成它的答案,如果有人有更简明的例子,请告诉我

嗯,我不知道
Ga
中是什么,但也许这将为您指明正确的方向

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

我最终为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;
    }
公共静态结果到维度结果(此GaData ga)
{
var results=新结果();
变量维度=新列表();
列出指标;
var值=”;
var metricStartIndex=1;
对于(var i=0;i
很有帮助,但我不知道使用LINQ是否可以完成我需要的任务,因为我需要知道某些行的索引,请参阅我的答案。我会的,这让我等到明天……)