繁体   English   中英

从xml和c#创建具有层次结构的动态对象

[英]Create dynamic object with hierarchy from xml and c#

我想从一串XML创建一个动态对象。 有一个简单的方法吗?

示例字符串。

<test><someElement><rep1>a</rep1><rep1>b</rep1></someElement></test>

我正在尝试创建一个用于通过nvelocity传递数据的mvc编辑器,并且希望前端的人输入xml作为要解析的数据。

提前致谢。

您需要完成以下两项工作:1)有效的xml 2)具有与输入xml中相同的数据成员的C#类。

您需要创建一个C#类的对象,然后对xml的所有元素进行枚举,并且当对每个元素名称使用switch时,可以采用该元素的内部text属性并将其分配给对象的各个数据成员。 C#代码可能类似于以下内容(您需要填补空白):

class test {
  List<string> someElement;
}

class xmlEnum 
{
 static test createObject(string inputXml) 
 {
     test t = new test();
     // load input xml in XmlDocument class
     // and start iterating thorugh all the elements
     swithc(elementName)
     {
        case rep1:
            t.someElement.add(element.innerText);
            break;
         // some more cases will go here

     }
   // finally return the object;
  return t;
 }
}

我希望这能帮到您。

我认为没有现成的动态解决方案。 如果我正确理解了您的问题,那么您想做这样的事情。

SomeDynamicXmlObject test = new SomeDynamicXmlObject(yourteststring);
var rep1 = test.SomeElement.rep1;

我能想到的最接近的方法是使用XElement类,如下所示:

XElement test = XElement.Parse(yourteststring);
var rep1 = test.Element("SomeElement").Element("rep1");

如果这还不够好,恐怕您将不得不自己编写一些东西来解析xml并动态创建对象。 如果您事先知道xml的外观,则可以使用shekhars代码,但是从您的评论中我猜您并没有。

如果您有可用的xml模式,并且在开发/构建环境中需要使用xml模式,则将采用一种绕行方式

  1. 使用XSD工具解析架构并从中生成代码
  2. 使用命令行编译器或编译器服务来生成所生成的代码以生成汇编。 现在,您可以在那里使用可用的类型。 不用说这将是一个相当慢的过程,这里将使用过程外工具。

没有dev env依赖项的另一种(不是简单的方法,而是更快的)方法是解析xml并使用反射生成动态类型。 请参阅本文以检查如何使用Reflection.Emit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM