【问题标题】:XML Serializer to objectXML 序列化器到对象
【发布时间】:2017-04-13 05:06:29
【问题描述】:

我想将一个简单的 XML 文件序列化为对象:

    <?xml version="1.0"?>

-<Tables>


-<StaticGroups>


-<StaticGroup Name="111">


-<Table>

<TableName>Table1 Name</TableName>

<TableTag>Table1 Tag</TableTag>

</Table>


-<Table>

<TableName>Table2 Name</TableName>

<TableTag>Table2 Tag</TableTag>

</Table>

</StaticGroup>


-<StaticGroup>


-<Table>

<TableName>Table3 Name</TableName>

<TableTag>Table3 Tag</TableTag>

</Table>

</StaticGroup>

</StaticGroups>

</Tables>

以下是类:

 [XmlRoot("Tables")]
    public class TablesXML
    {
        public TablesXML()
        {
            StaticTablesGroups = new List<StaticTablesGroup>();
        }


        [XmlArray("StaticGroups")]
        [XmlArrayItem("StaticGroup", typeof(StaticTablesGroup))]
        public List<StaticTablesGroup> StaticTablesGroups { get; set; }

    }

    public class StaticTablesGroup
    {
        public StaticTablesGroup()
        {
            GroupTables = new List<GroupTable>();
        }

        [XmlAttribute("Name")]
        public string Name { get; set; }

        [XmlArray("StaticGroup")]
        [XmlArrayItem("Table", typeof(GroupTable))]
        public List<GroupTable> GroupTables { get; set; }
    }


    public class GroupTable
    {

        [XmlElement("TableName")]
        public string Name { get; set; }
        [XmlElement("TableTag")]
        public string Tag { get; set; }
    }

使用 Name 属性正确创建了 StaticGroup 列表。

问题是 Table/s(TableName 和 TableTag)由于某种原因没有序列化。我做错了什么?

谢谢

编辑#1 谢谢 Marc 帮助解决问题 #1

现在我正在尝试在另一个 StaicGroup 中添加 StaticGroup

-<Tables>


 -<StaticGroups>


-<StaticGroup Name="111">


-<Table>

<TableName>Table1 Name</TableName>

<TableTag>Table1 Tag</TableTag>

</Table>
-<StaticGroup Name="111.1">


-<Table>

<TableName>Table1.1 Name</TableName>

<TableTag>Table1.1 Tag</TableTag>

</Table>
</StaticGroup>
</StaticGroup>

反序列化工作正常,但嵌套不从 XML 获取数据

修改了StaticTablesGroup类:

public class StaticTablesGroup
    {
        public StaticTablesGroup()
        {
            GroupTables = new List<GroupTable>();
            StaticTablesGroups = new List<StaticTablesGroup>();
        }

        [XmlAttribute("Name")]
        public string Name { get; set; }

        //[XmlArray("StaticGroup")]
        [XmlElement("Table", typeof(GroupTable))]
        public List<GroupTable> GroupTables { get; set; }



        [XmlElement("StaticGroup", typeof(StaticTablesGroup))]
        public List<StaticTablesGroup> StaticTablesGroups { get; set; }        
    }

但是,我按照 Marc 的建议检查了 Serialize,它工作正常

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    你已经在里面&lt;StaticGroup&gt;,所以你不需要[XmlArray("StaticGroup")]。相反,在列表上使用XmlElement,这使它将&lt;Table&gt; 的每个实例作为列表中的一个项目处理,而列表本身没有包装元素:

    [XmlElement("Table")]
    public List<GroupTable> GroupTables { get; set; }
    

    【讨论】:

    • 感谢您的帮助。我想更改 XML 以在 StaticGroup 中包含 StaticGroup 我修改了 StaticTableGroup class public class StaticTablesGroup { ... [XmlArray("StaticGroup")] [XmlArrayItem("StaticGroup", typeof(StaticTablesGroup))] public List SubGroup { 得到;放; } } 但是,子组没有反序列化。这次我做错了什么
    • @Vadim 专业提示:使用Serialize 并查看它生成的内容;将其与您想要的进行比较-这应该会告诉您在哪里看。如果没有完整的例子,我很难评论
    • 感谢您的提示。当序列化 XML 看起来完全符合预期时,但回读不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多