将二维数组转换为对象c#
这一切都源于查询谷歌分析数据。对于基本查询,更改的主要因素是维度和度量。返回的对象类型为GaData,您需要的实际结果位于GaData.Rows中 GaData.Rows的格式如下所示: 每个维度首先有一行,在本例中,有一行表示“新访客”,第二行表示“返回访客”。在这些行中,将包含另一组包含维度值的行,然后是您指定的每个度量(我只要求一个度量) 到目前为止,我的课程设置如下:将二维数组转换为对象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
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是否可以完成我需要的任务,因为我需要知道某些行的索引,请参阅我的答案。我会的,这让我等到明天……)