代码之家  ›  专栏  ›  技术社区  ›  sports Steven

XmlSerializer:反序列化为XMLElement

  •  1
  • sports Steven  · 技术社区  · 8 年前

    <A>
        <B>hello</B>
        <C>bye</C>
        <D>
            <E>111</E>
            <F>222</F>
        </D>
    </A>
    

    这个班呢

    [XmlRoot("A")]
    public class A
    {
        public string B { get; set; }
        public string C { get; set; }
        public System.Xml.XmlElement D { get; set; }
    }
    

    如你所见, 我对把“D”作为一个类来建模不感兴趣。

    string xml = "<A><B>hello</B><C>bye</C><D><E>111</E><F>222</F></D></A>";
    XmlSerializer serializer = new XmlSerializer(typeof(A));
    
    using (StringReader reader = new StringReader(xml))
    {
        A a = (A)serializer.Deserialize(reader);
    
        Console.WriteLine(a.D.OuterXml); // <-------
    }
    

    我当前的控制台输出如下:

    <E>111</E>
    

    <D>

    问:我应该怎么做才能得到这个控制台输出?

    <E>111</E><F>222</F>
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   pfx    8 年前

    应用 XmlAnyElement 属性到属性 D .

    它的内部Xml将包含 <E>111</E><F>222</F>
    <E>111</E><F>222</F> OuterXml 因为它缺少根元素。

    [XmlRoot("A")]
    public class A
    {
        public string B { get; set; }
        public string C { get; set; }
    
        [XmlAnyElement()]
        public XmlElement D { get; set; }
    }
    
        2
  •  1
  •   Selman Genç    8 年前

    XmlAnyElement 上的属性 D :

    [XmlAnyElement]
    public XmlElement D { get; set; }