如何将对象转换为强类型XML

时间:2015-06-04 08:11:28

标签: c# xml

有没有办法将对象转换为XML,但每个元素都包含一个属性(让我们像这样xt:type =" int")。
我知道我可以使用反射和迭代属性手动完成它.... 我问是否有办法使用预制的库或其他东西生成它 我现在正在做的是:

XmlDocument doc = new XmlDocument();
XmlSerializer ser = new XmlSerializer(document.GetType());
string result = string.Empty;
using (MemoryStream memStm = new MemoryStream())
 {
   ser.Serialize(memStm, document);
   memStm.Position = 0;
   result = new StreamReader(memStm).ReadToEnd();
 }

因为稍后我需要将它读回一个对象。 所有这些我想以编程方式进行,而不是使用XSD工具。

谢谢

更新1:
我想得到的东西看起来像这样:

<note>
   <propertyName1 xs:type="string">value1</to>
   <propertyName2 xs:type="int">10</to>
   <propertyName2 xs:type="datetime">04-06-2015 01:10:00</to>
</note>

最重要的是属性 xs:type

1 个答案:

答案 0 :(得分:1)

如果您使用System.XML.Linq,则可以添加任何您想要的XAttribute。

假设你有一个Personn P,其中包含字符串Name和int Age

XElement e = new XElement( "Personne" );
XElement age = new XElement("Age",Personne.Age);
age.add(new XAttribute("xs:type", typeOf(Personne.Age)));
e.Add(age);
XElement name = new XElement("Name",Personne.Name);
name.add(new XAttribute("xs:type", typeOf(Personne.Name)));
e.Add(name);`

您将收到XML:

<Personne>
<Age type="int">(the age of the personne)</age>
<Name type="string">(he name of the personne)</Name>
<Personne>

使用&#34;自动化&#34;过程:

XElement p = new XElement( "Personne" );

foreach(var property in Personn.GetType().GetProperties()) {
XElement e = new XElement(prop.Name, prop.GetValue(P, null));
e.Add(new XAttribute("xs:type", typeOf(Personne.prop)));
p.Add(e);
}

已编辑:已添加&#34; xs:&#34;因为你需要它