从未知的xml中创建匿名对象

Ada*_*one 4 c# xml anonymous-types

我想尝试从我编写的XML阅读器返回一个对象来处理一个具有部分未知结构的文件.

以下是XML的示例.

<xml>
  <strings>
    <Home>
      <Index>
        <PreWrapper>
          <Left>
            <Title>Blah</Title>
            <Body>Lorem ipsum dolor sit amet, consec tetuer adipiscing elit. Praesent vestibulum molestie lacus. Aenean nonummy hendrerit mauris. Phasellus porta. Fusce suscipit</Body>
            <LinkText>read more</LinkText>
            <LinkUrl>#</LinkUrl>
          </Left>
          <Center>
            <Title>Exploit your ideas</Title>
            <Body>Lorem ipsum dolor sit amet, consec tetuer adipiscing elit. Praesent vestibulum molestie lacus. Aenean nonummy hendrerit mauris. Phasellus porta. Fusce suscipit</Body>
            <LinkText>read more</LinkText>
            <LinkUrl>#</LinkUrl>
          </Center>
          <Right>
            <Title>Grow your business</Title>
            <Body>Lorem ipsum dolor sit amet, consec tetuer adipiscing elit. Praesent vestibulum molestie lacus. Aenean nonummy hendrerit mauris. Phasellus porta. Fusce suscipit</Body>
            <LinkText>read more</LinkText>
            <LinkUrl>#</LinkUrl>
          </Right>
        </PreWrapper>
      </Index>
    </Home>
  </strings>
  <config>
    <Home>
      <Index>
        <ShowPreWrapper>True</ShowPreWrapper>
      </Index>
    </Home>
  </config>
</xml>
Run Code Online (Sandbox Code Playgroud)

我想能够和我的读者打电话

var left = reader.GetObject("xml/strings/Home/Index/PreWrapper/Left");
Run Code Online (Sandbox Code Playgroud)

我希望它返回一个匿名对象(或动态对象,但我不太了解那些),看起来像

left.Title
left.Body
left.LinkText
left.LinkUrl
Run Code Online (Sandbox Code Playgroud)

要么

var xml = reader.GetObjcet("xml");
Run Code Online (Sandbox Code Playgroud)

并且能够像潜水一样潜入它

xml.strings.Home.Index....
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何创建这个对象.这甚至可能吗?

Chr*_*ain 6

我认为你可以使用ExpandoObject类来近似这个,但很可能有更好的方法来做到这一点(比如使用更松散的类型语言,使用词典等)

.NET BCL当然没有内置任何功能.

编辑:我最近发现了这个,它可能适用于这种情况:ElasticObject.