【问题标题】:Generating Custom Object from ArrayList in C# at runtime在运行时在 C# 中从 ArrayList 生成自定义对象
【发布时间】:2015-07-28 00:24:36
【问题描述】:

我将以下内容作为纯字符串存储在 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

我希望有一个具有以下结构的对象:

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

换句话说,我需要生成一个动态对象,它可以将数组列表作为属性列表,就像我们可以通过使用访问 asp.net gridview 中显示的任何值一样:

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

我尝试使用 ExpandoObject 但也失败了

【问题讨论】:

  • 是的,“有一种方法可以生成以下样式的动态对象”,但它有点过于宽泛了...旁注:使用 JSON 会让您的生活更轻松...跨度>
  • 有趣的是;此列表实际上是从 JSON 对象生成的,但使用我构建的自定义处理器,以便我可以按照问题发布的方式获得结果。 @AlexeiLevenkov
  • 请注意结构不是固定的,否则我可以构建一个类来将这些字符串值序列化为:(
  • @HassanAlrehamy - 我已经删除了我的答案,因为它似乎不是你需要的,我是否可以建议提供更多关于这个问题的细节,因为目前还不完全清楚是什么你需要;您似乎在说您想要获取一些 JSON,对其进行转换,将其转换为一堆字符串,然后将这些字符串转换回动态对象。哪个恕我直言没有多大意义 - 也许如果你能澄清这个自定义转换过程是什么以及为什么你不能只将一个动态对象转换为另一个,它可能更有意义:)
  • @StephenByrne-bro 忘了 json 和转换,如果你有上面显示的数据,你能或者不能动态生成动态对象吗?这是我的问题

标签: c# asp.net .net dynamic functional-programming


【解决方案1】:

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

    1234563
  1. 你需要有以下对象

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

  3. 在每一行中添加剩余的字符串作为扩展的值

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

仅此而已。您将拥有一个 expando 对象,它允许您通过链接属性来访问任何值,例如:

<pre>
var x = data.details[1].flowing[2].system_usage.Pages;
</pre>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2016-01-15
    相关资源
    最近更新 更多