有没有办法将对象转换为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 。
答案 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;因为你需要它