我的应用程序收到一个xml文件的常量流,这些文件或多或少是数据库记录的直接副本
<record type="update">
<field name="id">987654321</field>
<field name="user_id">4321</field>
<field name="updated">2011-11-24 13:43:23</field>
</record>
我需要将其反序列化为一个为所有列提供可空属性的类
class Record {
public long? Id { get; set; }
public long? UserId { get; set; }
public DateTime? Updated { get; set; }
}
我似乎无法找到一种方法,无需手动解析xml文件并打开字段的name
属性来存储值。
他们是否可以使用XmlSerializer快速实现这一目标?如果没有,他们是一种更有效的手动解析方式吗?
问候并感谢
我的主要问题是属性name
需要将其值设置为属性名称,将其值设置为<field>..</field>
元素的内容
答案 0 :(得分:7)
修改强> 编辑答案以反映您使用当前xml布局可以获得的最佳效果,您将获得具有两个属性的字段对象数组,名称,例如ID和值,节点中的文本
您可以创建一个Xml Definition类,将其传递给Xml Serializer,它会返回对象,并将xml的值初始化为它的属性。
所以给出以下定义文件。
[XmlTypeAttribute]
[XmlRootAttribute("record")]
public class RecordXmlConfiguration
{
[XmlElementAttribute("field")]
public Field[] Fields { get; set; }
}
[XmlTypeAttribute]
public class Field
{
[XmlAttributeAttribute("name")]
public string Name { get; set; }
[XmlText]
public string Value { get; set; }
}
然后,当你拥有你的xml时,你将它传递给一个方法,它应该返回一个你的Xml定义类类型的对象,如此
public static object Deserialize(string xml)
{
var deserializer = new System.Xml.Serialization.XmlSerializer(typeof(RecordXmlConfiguration));
using (var reader = XmlReader.Create(new StringReader(xml)))
{
return (RecordXmlConfiguration)deserializer.Deserialize(reader);
}
}
它可能很繁琐,但是当它设置正确时,它节省了我很多时间,就像你完成它一样,你也可以在同一个maanner中创建一个序列化方法,将它返回到它的Xml形式。
确保添加对项目的引用以允许这些使用语句
using System.Xml.Serialization;
using System.Xml;