是否可以从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>
您可以使用XSD.EXE产生一类 http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=VS.100).aspx
+1,因为这是正确的答案,但它可能不会被标记为这样。 –
这个XML将会从数据集中产生。那么去xsd是个好主意吗? –
的XML模式定义(XSD.EXE)工具,可以从XML文件生成公共语言运行时类。更多信息可以发现here。
我喜欢它,当两个人同时输入相同的答案时。 +1,因为你可能在msmucker输入他们的答案时进行编辑。 – EtherDragon
没有,我有什么选择吗? –
假设你的意思是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
希望这有助于
在这个例子中已经采取了人物磨合,必须动态创建。意思是,我没有任何课程,我会从数据集中生成xml,并希望转换为类。 –
你尝试过这么远吗?不要在这里告诉人们你的问题是紧急的..这是死亡之吻。 –
你能否澄清你的要求?你想采取一些XML,并从它创建和*实例*的类,或者你想实际上从它生成一个C#类文件(.CS)? –
我刚刚才知道,我可以使用xsd.exe从xsd创建一个类,因为我在运行时获得了xml(dataset.GetXML())我应该创建xsd而不使用命令提示符意思在我的相同函数中,得到我的xml? 让我知道如果我的问题不清楚。 –