C#Linq将对象属性转换为数组
我有一个正在转换为JSON的对象,将由Ember.js使用。 目前我有一些完全展开的子对象,但ember希望 只是客户端上的一个ID数组。我怎样才能把这个物体展平 成为C#Linq将对象属性转换为数组,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个正在转换为JSON的对象,将由Ember.js使用。 目前我有一些完全展开的子对象,但ember希望 只是客户端上的一个ID数组。我怎样才能把这个物体展平 成为int[] items = Mapper.Map<IList<Item>>(client.GetItems()); foreach (var item in items) { int[] choices = item.Choices.Select(x => x.Id).ToArray();
int[]
items = Mapper.Map<IList<Item>>(client.GetItems());
foreach (var item in items)
{
int[] choices = item.Choices.Select(x => x.Id).ToArray();
item.Choices = choices;
}
我想要生成的JSON
{ "items": [
{
"id": 0,
"name": "Item0",
"description": "...",
"choices": [0, 1]
},
{
"id": 1,
"name": "Item1",
"description": "...",
"choices": [0, 1]
}
]}
SelectMany
展平列表并生成包含所有项目的单个列表
items.SelectMany(x=>x.Choices.Select(y=>y.Id).ToArray()));
获取有关无法从IList转换为int[]类型的错误。如何强制转换该属性
不能将一种类型强制转换为另一种类型。相反,您可以在类中创建int[]类型的另一个属性,并在getter中使用LINQ语句(进行必要的验证检查)
问题就在这里:item.Choices=Choices;item.Choices是List类型,您正在尝试分配int[]类型的选项。是的,我如何才能绕过它而不创建一个全新的类,唯一的区别是Items是int[]而不是IList。我想更改此对象实例的属性类型。为什么不使用SelectMany?您不需要创建其他类,也无法更改属性类型。您可以在现有类中创建int[]类型的另一个属性,并在getter中使用linq语句。类似item.choiceId的东西?
SelectMany
在这里对您没有帮助。您需要创建一个新类,其中的选项定义为int[]
,而不是IList
items.SelectMany(x=>x.Choices.Select(y=>y.Id).ToArray()));
public int[] ChoiceIDs
{
get {
return this.Choices.Select(x => x.Id).ToArray();
}
}