如何反序列化嵌套在另一个标记的文本部分中的标记

本文关键字:文本部 另一个 反序列化 嵌套 | 更新日期: 2023-09-27 18:10:42

如何表示下面XML的结构以便进一步反序列化为类?

<HeadElement id="1">
    Text in HeadElement start
    <SubElement samp="0">
        Text in SubElement
    </SubElement>
    Continue text
 </HeadElement>

我当前的代码是这样的:

[DataContract]
public class ClaimText
{
    [DataMember, XmlElement(ElementName = "claim-ref")]
    public ClaimRef claimref; // { get; private set; }
    public void setclaimref(ClaimRef claimref_)
    {
        this.claimref = claimref_;
    }
    [DataMember, XmlText()]
    public string txt; // { get; private set; }
    public void settxt(string txt_)
    {
        this.txt = txt_;
    }       
}

给定以下XML内容:

<claim id="CLM-00016" num="00016">
    <claim-text>16. The midgate assembly of <claim-ref idref="CLM-00015">claim 15</claim-ref>, further comprising a second ramp member connected to an opposite side of the midgate panel for selectively covering an opposite end of the pass-through aperture. </claim-text>
</claim>

我得到指向"claim-ref"的链接所在的对象,但不是整个文本:只有它的第二部分(",进一步包括…")。如何获得全文?

如何反序列化嵌套在另一个标记的文本部分中的标记

首先,您混合了DataContractSerializerXmlSerializer的属性。

Ad rem:在混合元素情况下,最好使用XmlSerializer。下面是使用XML的结构:

[XmlRoot(ElementName = "claim")]
public class ClaimText
{
    [XmlAttribute]
    public string id;
    [XmlAttribute]
    public string num;
    [XmlElement(ElementName = "claim-text")]
    public ClaimInnerContents contents;
}
public class ClaimInnerContents
{
    [XmlElement(ElementName = "claim-ref", Type = typeof(ClaimRef))]
    [XmlText(Type = typeof(string))]
    public object[] contents;
}
public class ClaimRef
{
    [XmlAttribute]
    public string idref;
    [XmlText]
    public string text;
}

ClaimRef和拆分的文本段被反序列化到contents数组中作为对象。

当然,您可以(而且应该)为该数组的特定元素提供静态类型和检查访问器。