首页 > 解决方案 > 我将如何构建类以促进嵌套元素以及 XML 中的文本以进行 C# 反序列化

问题描述

所以前几天我问了这个问题并被指出了这个问题,这让我部分解决了我的问题。

我的原始数据示例被减少和简化以解决我最初的问题,但在最终能够将 xml 反序列化到我的类中的过程中,我注意到反序列化中大约有 10 个对象会出错。经过一些故障排除后,我使用数据来查找实际数据,看来这<b></b>就是<p></p>我的问题。我在网上使用了几个转换器来帮助我的课程,但似乎没有一个能正确解决这个问题。

在此之前,在各种层次结构中有大量 XML 标记......

<description type="formattedtext">
    <p>Some stuff in here.</p>
    <p>Some other stuff was here.</p>
    <p><b>Title of Table</b></p>
    <table>
        <tr>
            <td><b>Size</b></td>
            <td><b>weight</b></td>
            <td><b>Length</b></td>
        </tr>
        <tr>
            <td>Tiny</td>
            <td>20</td>
            <td>18</td>
        </tr>
        <tr>
            <td>Small</td>
            <td>25</td>
            <td>16</td>
        </tr>
        <tr>
            <td>Medium</td>
            <td>40</td>
            <td>13</td>
        </tr>
        <tr>
            <td>Large</td>
            <td>50</td>
            <td>10</td>
        </tr>
        <tr>
            <td>Huge</td>
            <td>80</td>
            <td>10</td>
        </tr>
    </table>
    <p>Some extra description goes here.</p>
    <p>Some other extra stuff for describing things goes here.</p>
    <p><b>Additional notes. </b>Final stuff goes here.</p>
</description>

在这之后,在各种层次结构中有很多 XML 标记......

我认为真正的问题是“附加说明”的最后一点,其中<b>标签是其中的一部分,<p>但其中也有文本。反序列化器将通常与 HTML 关联的所有标记视为 XML,因此我为表设置了类。

所有其余的类都可以工作,但在线转换器的输出如下:

[XmlRoot(ElementName="p")]
public class P { 

    [XmlElement(ElementName="b")] 
    public string B { get; set; } 
}

[XmlRoot(ElementName="description")]
public class Description { 

    [XmlElement(ElementName="p")] 
    public List<string> P { get; set; } 

    [XmlAttribute(AttributeName="type")] 
    public string Type { get; set; } 

    [XmlText] 
    public string Text { get; set; } 
}

我假设我需要将其设置List<string> P为 aList<P> P但不确定还需要什么其他属性,我确实尝试在 Description 父级中添加一个 Text ,但没有任何乐趣。

此外,如果有一种方法可以忽略可能有用的元素下的结构。就我而言,我不需要在其自己的对象中描述 P 的数组,它可能是一个字符串,但我还没有找到允许这样做的设置/装饰器,我认为可能存在问题下面标签上的反序列化器不确定是否要逃避它们以使其被忽略。

总体目的是这些数据由应用程序使用,并且在该应用程序中,我能够通过 UI 手动在元素中添加更多功能,该 UI 转换为 XML 存储中的其他元素。但是,由于六个文件中有数百个这样的文件,我试图加载所有相关项目并解析它们,然后输出到一个新的数据文件中,供程序使用 UI 使用。

标签: c#xml.net-core

解决方案


推荐阅读