是否可以从xml创建C#类?

问题描述:

是否可以从xml创建C#类?是否可以从xml创建C#类?

想我的XML是什么样子,

<Person> 
    <Name>aaaa</Name> 
    <Email>bbb</Email> 
</Person> 

然后人将是类名和名称,电子邮件一定是我的财产。它将如何处理集合或潜在的子对象?

<Person> 
    <Name>aaaa</Name> 
    <Email>bbb</Email> 
    <PhoneNumbers> 
     <Number Type="Cell">5555555</Number> 
     <Number Type="Home">5555554</Number> 
    </PhoneNumbers> 
</Person> 
+0

你尝试过这么远吗?不要在这里告诉人们你的问题是紧急的..这是死亡之吻。 –

+0

你能否澄清你的要求?你想采取一些XML,并从它创建和*实例*的类,或者你想实际上从它生成一个C#类文件(.CS)? –

+0

我刚刚才知道,我可以使用xsd.exe从xsd创建一个类,因为我在运行时获得了xml(dataset.GetXML())我应该创建xsd而不使用命令提示符意思在我的相同函数中,得到我的xml? 让我知道如果我的问题不清楚。 –

+0

+1,因为这是正确的答案,但它可能不会被标记为这样。 –

+0

这个XML将会从数据集中产生。那么去xsd是个好主意吗? –

的XML模式定义(XSD.EXE)工具,可以从XML文件生成公共语言运行时类。更多信息可以发现here

+1

我喜欢它,当两个人同时输入相同的答案时。 +1,因为你可能在msmucker输入他们的答案时进行编辑。 – EtherDragon

+0

没有,我有什么选择吗? –

假设你的意思是xml序列化,你可以使用它作为例子。注意使用XML属性来控制serializion /反序列化:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Xml.Linq; 
using System.Xml.Serialization; 

namespace ThrowAwayCSConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      //Create an instance of the Person 
      Person p = new Person { Name = "John Doe", Email = "[email protected]" }; 
      p.PhoneNumbers.Add(new PhoneNumber { Type = "Home", Number = "999-555-1234" }); 
      p.PhoneNumbers.Add(new PhoneNumber { Type = "Work", Number = "999-555-9876" }); 

      StringBuilder output = new StringBuilder(); 

      XmlSerializer xSer = new XmlSerializer(typeof(Person)); 

      //serialize it to xml 
      using (StringWriter wrt = new StringWriter(output)) 
      { 
       xSer.Serialize(wrt, p); 
      } 

      //Print the output 
      Console.WriteLine(output.ToString()); 


      //Deserialize the xml string back to an instance of Person 
      Person p2 = null; 
      using (StringReader rdr = new StringReader(output.ToString())) 
      { 
       p2 = xSer.Deserialize(rdr) as Person; 
      } 

      //Use p2 instance here 
      Console.WriteLine("\r\nName: {0}, Email: {1}, has {2} phone numbers:", p2.Name, p2.Email, p2.PhoneNumbers.Count); 
      foreach (var number in p2.PhoneNumbers) 
      { 
       Console.WriteLine(" {0}: {1}", number.Type, number.Number); 
      } 

      Console.ReadLine(); 
     } 
    } 

    [Serializable] 
    [XmlInclude(typeof(PhoneNumber))] 
    public class Person 
    { 
     public string Name { get; set; } 
     public string Email { get; set; } 

     [XmlArrayItem("Number")] 
     public List<PhoneNumber> PhoneNumbers { get; set; } 

     public Person() 
     { 
      PhoneNumbers = new List<PhoneNumber>(); 
     } 
    } 

    [Serializable] 
    public class PhoneNumber 
    { 
     [XmlAttribute] 
     public string Type { get; set; } 
     [XmlText] 
     public string Number { get; set; } 
    } 
} 

从这段代码的输出是:

<?xml version="1.0" encoding="utf-16"?> 
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Name>John Doe</Name> 
    <Email>[email protected]</Email> 
    <PhoneNumbers> 
    <Number Type="Home">999-555-1234</Number> 
    <Number Type="Work">999-555-9876</Number> 
    </PhoneNumbers> 
</Person> 

Name: John Doe, Email: [email protected], has 2 phone numbers: 
    Home: 999-555-1234 
    Work: 999-555-9876 

希望这有助于

+0

在这个例子中已经采取了人物磨合,必须动态创建。意思是,我没有任何课程,我会从数据集中生成xml,并希望转换为类。 –