Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时从C#中的ArrayList生成自定义对象_C#_Asp.net_.net_Dynamic_Functional Programming - Fatal编程技术网

在运行时从C#中的ArrayList生成自定义对象

在运行时从C#中的ArrayList生成自定义对象,c#,asp.net,.net,dynamic,functional-programming,C#,Asp.net,.net,Dynamic,Functional Programming,我将以下内容以纯字符串形式存储在ArrayList中,每行表示列表中某个项目的值,是否有方法以以下样式生成动态对象: [左操作数是属性]= [右操作数是该属性的值] object.data.details[1].tid=711 object.data.details[1].type="ongoing" object.data.details[1].attach="node1" object.data.details[1].flowing[1].comid="component1" object.

我将以下内容以纯字符串形式存储在ArrayList中,每行表示列表中某个项目的值,是否有方法以以下样式生成动态对象: [左操作数是属性]= [右操作数是该属性的值]

object.data.details[1].tid=711
object.data.details[1].type="ongoing"
object.data.details[1].attach="node1"
object.data.details[1].flowing[1].comid="component1"
object.data.details[1].flowing[1].system-usage.RAM="12%"
object.data.details[1].flowing[1].system-usage.CPU="3%"
object.data.details[1].flowing[1].system-usage.Pages=3
object.data.details[1].flowing[2].comid="component2"
object.data.details[1].flowing[2].system-usage.RAM="9%"
object.data.details[1].flowing[2].system-usage.CPU="2%"
object.data.details[1].flowing[2].system-usage.Pages=1
object.data.details[1].flowing[3].comid="component3"
object.data.details[1].flowing[3].system-usage.RAM="7%"
object.data.details[1].flowing[3].system-usage.CPU="7%"
object.data.details[1].flowing[3].system-usage.Pages=5
object.data.details[2].tid=712
object.data.details[2].type="ongoing"
object.data.details[2].attach="node2"
object.data.details[2].flowing[1].comid="component1"
object.data.details[2].flowing[1].system-usage.RAM="12%"
object.data.details[2].flowing[1].system-usage.CPU="3%"
object.data.details[2].flowing[1].system-usage.Pages=3
object.data.details[2].flowing[2].comid="component2"
object.data.details[2].flowing[2].system-usage.RAM="9%"
object.data.details[2].flowing[2].system-usage.CPU="2%"
object.data.details[2].flowing[2].system-usage.Pages=1
object.data.details[2].flowing[3].comid="component3"
object.data.details[2].flowing[3].system-usage.RAM="7%"
object.data.details[2].flowing[3].system-usage.CPU="7%"
object.data.details[2].flowing[3].system-usage.Pages=5
object.data.details[3].tid=713
object.data.details[3].type="ongoing"
object.data.details[3].attach="node2"
object.data.details[3].flowing[1].comid="component1"
object.data.details[3].flowing[1].system-usage.RAM="12%"
object.data.details[3].flowing[1].system-usage.CPU="3%"
object.data.details[3].flowing[1].system-usage.Pages=3
object.data.details[3].flowing[2].comid="component2"
object.data.details[3].flowing[2].system-usage.RAM="9%"
object.data.details[3].flowing[2].system-usage.CPU="2%"
object.data.details[3].flowing[2].system-usage.Pages=1
object.data.details[3].flowing[3].comid="component3"
object.data.details[3].flowing[3].system-usage.RAM="7%"
object.data.details[3].flowing[3].system-usage.CPU="7%"
object.data.details[3].flowing[3].system-usage.Pages=5
<pre>
var x = data.details[1].flowing[2].system_usage.Pages;
</pre>
我希望有一个具有以下结构的对象:

object.data.details[i].flowing[j].comid="component1"
if i=j=1
object.data.details[i].flowing[j].system-usage.RAM="9%"
if i=1 and j=2
换句话说,我需要生成一个动态对象,该对象可以将arraylist作为属性列表,就像我们可以通过以下方式访问asp.net gridview中显示的任何值一样:

gridview1.rows[i].someproperty[j].value = "something"

我尝试使用ExpandoObject,但也失败了。我尝试使用反射,但如果我在同一线程中生成~1K个对象,它会消耗大量内存。

好的,伙计们,我想出了如何做到这一点,以防有人会遇到此问题,这里是解决方案:

  • 您必须使用点(.)和指针标记每一行,以跟踪索引,您应该使用带有ref关键字的指针,以便跳过平方开字符和平方闭字符以及介于两者之间的索引

  • 您将需要具有以下对象

    ExpandoObject expandoObject = new ExpandoObject(); IDictionary objects = expandoObject; ExpandoObject ExpandoObject=新的ExpandoObject(); IDictionary对象=ExpandooObject;
  • 您需要构建一个递归方法,该方法能够将第一级标记化字符串(第一个标记)添加为字典键,其值为expando object

  • 在每行中添加剩余字符串作为expando的值

  • 标记已存储为expando对象的剩余字符串,然后重复3,4

  • 就这些。您将拥有一个expando对象,该对象允许您通过链接属性来访问任何值,例如:

    
    var x=data.details[1]。正在流动的[2]。system_usage.Pages;
    
    是的,“有一种方法可以生成以下样式的动态对象”,但它有点过于宽泛。。。旁注:使用JSON会让你的生活更轻松……有趣的是;这个列表实际上是从JSON对象生成的,但是使用了我构建的自定义处理器,这样我就可以按照发布问题的方式得到结果@AlexeiLevenkovand请注意,该结构不是固定的,否则我可以构建一个类来序列化这些字符串值:(@hassanlerhamy-我已经删除了我的答案,因为它似乎不是您需要的,我建议您对这个问题提供更多的细节,因为目前还不完全清楚您需要什么;您似乎在说您想要获取一些JSON,转换它,将其转换为一组字符串,然后将这些字符串转换回发电机ic对象。这个imho没有多大意义-也许如果你能澄清这个自定义转换过程是什么,以及为什么你不能将一个动态对象转换成另一个,它可能更有意义:)@StephenByrne-bro忘了json和转换,如果你有上面显示的数据,你能不能动态生成一个动态对象?这是我的问题