XmlSerializer将C#对象转换为xml字符串问题

时间:2019-05-22 19:18:06

标签: c# xml

我有以下代码,但我不想显示名为“ booksList”的节点。 我需要您提供有关解决方案的帮助,我删除了XmlArrayItem标签,但无法正常工作。

我以以下帖子为例

您不能使用标准的序列化工具序列化问题中的类,以使它的条目与节点处于同一级别。 当使用标准序列化工具保存的类时,您的节点列表将始终嵌套在与节点处于同一级别的单独的数组节点中。同样关注在书类上记录数组字段。 要生成所需的XML输出(节点与节点处于同一级别),您必须在books类中实现IXmlSerializable接口以进行自定义序列化。要查看IXmlSerializable实现的示例,请访问以下链接:StackOverflow答案,CodeProject文章。 另一个解决方案是-正如亚历山大用户在对我的回答的评论中所述-从列表类型继承您的图书类,并在您的图书类上具有从列表类型继承的类类型的字段记录。

$values = '$' . implode(',$', range(1, count($array)));
$query = "INSERT INTO table VALUES($values)";
$result = pg_query_params($dbh, $query, $array);
[XmlRoot("books")]
public class books
{
    [XmlElement("bookNum")]
    public int bookNum { get; set; }

    [XmlRoot("book")]
    public class book
    {
        [XmlElement("name")]
        public string name { get; set; }

        [XmlRoot("record")]
        public class record
        {
            [XmlElement("borrowDate")]
            public string borrowDate { get; set; }

            [XmlElement("returnDate")]
            public string returnDate { get; set; }
        }

        [XmlArray("borrowRecords")]
        [XmlArrayItem("record")]
        public record[] records { get; set; }
    }

    [XmlArray("booksList")]
    [XmlArrayItem("book")]
    public book[] books { get; set; }
}

如果我使用标签“ XmlIgnore”(如Ed Plunkett所说的那样工作),但是我删除了数组中的所有数据,则我需要数据,而不是“ booksList”节点。

像这样:

<books>
    <bookNum>2</bookNum>
    <booksList>
        <book>
            <name>Book 1</name>
            <borrowRecords>
                <record>
                    <borrowDate>2013-1-3</borrowDate>
                    <returnDate>2013-1-5</returnDate>
                </record>
                <record>            
                    <borrowDate>2013-2-3</borrowDate>
                    <returnDate>2013-4-5</returnDate>
                </record>
            </borrowRecords>
        </book>
        <book>
            <name>Book 2</name>
            <borrowRecords>
                <record>
                    <borrowDate>2013-1-3</borrowDate>
                    <returnDate>2013-1-5</returnDate>
                </record>
                <record>            
                    <borrowDate>2013-2-3</borrowDate>
                    <returnDate>2013-4-5</returnDate>
                </record>
            </borrowRecords>
        </book>
    </booksList>
</books>

我使用此示例是因为我无法显示原始数据,但是由于需要使用标准格式,因此我需要删除“ booksList”是同样的问题。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,只需在cs类中为[XmlElement(“ book”)]更改或添加[XmlArrayItem(“ book”)]:

[XmlRoot("books")]
public class books
{
    [XmlElement("bookNum")]
    public int bookNum { get; set; }

    [XmlRoot("book")]
    public class book
    {
        [XmlElement("name")]
        public string name { get; set; }

        [XmlRoot("record")]
        public class record
        {
            [XmlElement("borrowDate")]
            public string borrowDate { get; set; }

            [XmlElement("returnDate")]
            public string returnDate { get; set; }
        }

        [XmlElement("record")]
        public record[] records { get; set; }
    }

    [XmlElement("book")]
    public book[] books { get; set; }
}

这将获得以下xml文件:

<books>
    <bookNum>2</bookNum>
    <book>
        <name>Book 1</name>
        <borrowRecords>
            <record>
                <borrowDate>2013-1-3</borrowDate>
                <returnDate>2013-1-5</returnDate>
            </record>
            <record>
                <borrowDate>2013-2-3</borrowDate>
                <returnDate>2013-4-5</returnDate>
            </record>
        </borrowRecords>
    </book>
    <book>
        <name>Book 2</name>
        <borrowRecords>
            <record>
                <borrowDate>2013-1-3</borrowDate>
                <returnDate>2013-1-5</returnDate>
            </record>
            <record>
                <borrowDate>2013-2-3</borrowDate>
                <returnDate>2013-4-5</returnDate>
            </record>
        </borrowRecords>
    </book>
</books>

没有节点“”