c# - 反序列化使用属性名称/值对的 xml

标签 c# xml serialization

我的应用程序接收到源源不断的 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> 的内容元素

最佳答案

编辑 编辑答案以反射(reflect)当前 xml 布局所能获得的最佳结果,您将获得一个字段对象数组,其中包含两个属性,名称(例如 ID)和值(节点中的文本)

您可以创建一个 Xml 定义类,将其传递给一个 Xml 序列化程序,它会返回您的对象,其中包含初始化到其属性中的 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);
        }
    }

它可能很繁琐,但是当它设置正确时,它为我节省了大量时间,因为当你完成它时,你还可以在相同的方式中创建一个序列化方法以将它返回到它的 Xml 形式。

确保添加对项目的引用以允许使用这些 using 语句

using System.Xml.Serialization;
using System.Xml;

关于c# - 反序列化使用属性名称/值对的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260461/

相关文章:

来自 xml 的 Android 本地化字符串

xml 架构验证错误 "prefix is not bound"

java - 什么可以在序列化和存储在 Jarfile 中时修改 SerialVersionUID?

java - 如何通过 TCP 连接发送类?

c# - GetInterface 始终返回 null

c# - 如何将 List<T> 序列化为 XML?

c# - 引用 Unity3D 中的众多协程之一?

c# - 在 asp.net mvc 中使用异步 Controller 有什么好处?

java - 启动新 Activity 会导致 Android 应用崩溃

ios - 下次应用程序启动时我可以关闭本地通知吗?