C# 从对象数组C中提取数据
查看上面的示例,我想知道如何将类型为object的requestedClass转换为数组以供读取C# 从对象数组C中提取数据,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,查看上面的示例,我想知道如何将类型为object的requestedClass转换为数组以供读取 [HttpGet] public object Get(string table, string columns, int id) { var splitColumns = columns.Split(','); var t = new propertyModel() { gallery = _db.PR
[HttpGet]
public object Get(string table, string columns, int id)
{
var splitColumns = columns.Split(',');
var t = new propertyModel()
{
gallery = _db.PROPERTYGALLERies.Where(p => p.propertyId == id).ToList(),
property = _db.PROPERTies.SingleOrDefault(p => p.id == id)
};
var requestedClass = t.GetType().GetProperty(table.ToLower()).GetValue(t, null);
var returnArray = new Dictionary<string, List<string>>();
var requestArray = new List<string>();
foreach (var column in splitColumns)
{
foreach (var field in StringProperties(requestedClass, column))
{
requestArray.Add(field.Value);
}
}
returnArray.Add(table, requestArray);
return Json(returnArray, JsonRequestBehavior.AllowGet);
}
public IEnumerable<KeyValuePair<string, string>> StringProperties(object obj, string column)
{
return from p in obj.GetType().GetProperties()
where p.Name == column
select new KeyValuePair<string, string>(p.Name, Convert.ToString(p.GetValue(obj)));
}
您可以将其强制转换为适当的底层类型。例如,如果对象实际上是DataObject[]的一个实例,则可以执行以下操作:
DataObject[] mydataObjectArray = (DataObject[])requestedClass;
你应该准备好了。请记住,DataObject只是我用来说明这个概念的一个虚构类。无论requestedClass在被转换为对象之前最初是什么,您都需要将其转换为什么 您可以将其强制转换为任何适当的底层类型。例如,如果对象实际上是DataObject[]的一个实例,则可以执行以下操作:
DataObject[] mydataObjectArray = (DataObject[])requestedClass;
你应该准备好了。请记住,DataObject只是我用来说明这个概念的一个虚构类。无论requestedClass在被转换为对象之前最初是什么,您都需要将其转换为什么 这取决于您在编译时对对象的了解。如果您只知道它是一个IEnumerable,那么您应该能够像这样对它进行转换:
object[] values = ((IEnumerable<object>)requestedClass).ToArray();
这取决于您在编译时对对象的了解。如果您只知道它是一个IEnumerable,那么您应该能够像这样对它进行转换:
object[] values = ((IEnumerable<object>)requestedClass).ToArray();
很抱歉提出一个简短的问题,试图为两个小家伙的晚餐排序,同时也解决了这个问题:能否请您将代码显示为纯文本,而不是图像?是的,当然,两秒钟requestedClass的值是什么。GetType?@DangerZone我认为它仍然相关,如果您仍然不这样做,我可以确定地删除它。只是它显示了requestedClass的结果抱歉,简短的问题,尝试为两个小家伙的晚餐排序,同时也解决了这个问题:能否请您将代码显示为纯文本,而不是图像?是的,当然,两秒钟requestedClass的值是什么。GetType?@DangerZone我认为它仍然相关,如果你还不知道,我肯定可以把它搬走。它显示了requestedClassProblem的结果是动态地获取对象类。据我所知,atm无法将数据类型转换成变量,以这种方式使用。这取决于你想用它做什么。您可以使用requestedClass.GetType并对任意数量的内容使用反射。就像我说的,这完全取决于你想用它做什么。让我快速创建一个视频,向你展示我的要求。。。我们不需要视频。只要描述一下你想要达到的目标。可能包括一些伪代码作为示例来提供一些上下文。基本上,我正在尝试调用URL,例如/{controller}/{action}/{table}/{fields}/{id}和API,以从所选表传回所选字段。它非常适用于SingleOrDefault数据类型,但当它存储在数组中时,我遇到了无法转换为可以迭代的内容的问题。我遇到的问题是,我动态地获取对象类。据我所知,atm无法将数据类型转换成变量,以这种方式使用。这取决于你想用它做什么。您可以使用requestedClass.GetType并对任意数量的内容使用反射。就像我说的,这完全取决于你想用它做什么。让我快速创建一个视频,向你展示我的要求。。。我们不需要视频。只要描述一下你想要达到的目标。可能包括一些伪代码作为示例来提供一些上下文。基本上,我正在尝试调用URL,例如/{controller}/{action}/{table}/{fields}/{id}和API,以从所选表传回所选字段。它非常适用于SingleOrDefault数据类型,但当它存储在数组中时,我遇到了无法转换为可以迭代的对象的问题。不幸的是,我不知道他们将请求什么对象类。基本上,我试图调用一个URL,比如/{controller}/{action}/{table}/{fields}/{id}和API,以便从所选表传回所选字段。它非常适用于SingleOrDefault数据类型,但当它存储在数组中时,我会遇到无法转换为我可以迭代的内容的问题。实际上,这与最终结果非常接近,所以我会向上投票,但无法将其作为正确答案推送。如果您想将答案稍微修改为IEnumerable collection=IEnumerablerequestedClass;然后是收藏中的foreach案例。我将把它标记为答案。@TheAngrySaxon:让我知道我更新的答案是否足够正确。不,没有必要转换为Array,因为它已经被视为一个。我所需要做的就是将每个对象数组存储到IEnumerable中,我甚至不确定是否也需要转换为IEnumerable。模型类需要保持不明确,因为它是在运行时设置的。@TheAngrySaxon:看上面的示例,我想知道如何将object类型的requestedClass转换为数组,以便读取。ToArray确保它是一个
大堆如果您不需要数组,只需忽略该调用。不幸的是,我不知道他们将请求什么对象类。基本上,我试图调用一个URL,比如/{controller}/{action}/{table}/{fields}/{id}和API,以便从所选表传回所选字段。它非常适用于SingleOrDefault数据类型,但当它存储在数组中时,我会遇到无法转换为我可以迭代的内容的问题。实际上,这与最终结果非常接近,所以我会向上投票,但无法将其作为正确答案推送。如果您想将答案稍微修改为IEnumerable collection=IEnumerablerequestedClass;然后是收藏中的foreach案例。我将把它标记为答案。@TheAngrySaxon:让我知道我更新的答案是否足够正确。不,没有必要转换为Array,因为它已经被视为一个。我所需要做的就是将每个对象数组存储到IEnumerable中,我甚至不确定是否也需要转换为IEnumerable。模型类需要保持不明确,因为它是在运行时设置的。@TheAngrySaxon:看上面的示例,我想知道如何将object类型的requestedClass转换为数组,以便读取。ToArray确保它是一个数组。如果不需要数组,只需省略该调用即可。