首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSerializer将C#对象转换为xml字符串问题

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

Stack Overflow用户
提问于 2019-05-22 19:18:05
回答 1查看 80关注 0票数 1

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

--我从下面的帖子中拿出了这个例子

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

代码语言:javascript
复制
[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; }
}
代码语言:javascript
复制
<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>

如果像Ed所说的那样使用"XmlIgnore“标记,但是删除数组中的所有数据,那么我需要的是数据,而不是"booksList”节点。

就像这样:

代码语言:javascript
复制
<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>

我使用这个例子是因为我无法显示原始数据,但我需要删除"booksList“的问题与我需要使用的标准相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 21:51:04

我找到了解决方案,只需在cs类中更改或添加用于XmlArrayItem("book")的XmlElement("book"),如下所示:

代码语言:javascript
复制
[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文件:

代码语言:javascript
复制
<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>

没有节点"“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56263565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档