繁体   English   中英

XML反序列化派生类

[英]XML deserialize derived class

问题是XmlType(“ Erand”)的名称与我的班级Erand相同,如果我将班级名称更改为可以正常工作的Eranda,是否还有其他方法可以说.net呢?

我有一堂课

        public class Erand
        {
            public long ID { get; set; }
            public string AsjaNumber { get; set; }
         }

[XmlType("Erand")]
    public class ErandTsiv : Erand
    {
        [XmlElement("ID_KIS")]
        public long idKis { get; set; }

        [XmlElement("ID_ET")]
        public long idEt { get; set; }

    }

我想反序列化ErandTsiv

从XML像

    <?xml version="1.0" encoding="utf-16"?>
<ArrayOfErand xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Erand>
   <ID>573838383</ID>
   <ID_KIS>573838383</ID_KIS>
   <ID_ET></ID_ET>
   <AsjaNumber>2-08-88785</AsjaNumber>
</Erand>
</ArrayOfErand>

喜欢

var stream = new StringReader(erandid);
                var serializer = new XmlSerializer(new List<ErandTsiv>().GetType());
                var erandTsivs = (IList<ErandTsiv>)serializer.Deserialize(stream);`

但出现错误

{"There was an error reflecting type 'System.Collections.Generic.List`1[Aet.test.unit.application.utility.TsivTapsustaTest.ErandTsiv]'."}

要反序列化此确切的XML,您应该为List<ErandTsiv>依赖自定义List定义,而在XmlTypeErandTsiv

您的课程定义将是:

public class Erand
{
    public long ID { get; set; }
    public string AsjaNumber { get; set; }
}

public class ErandTsiv : Erand
{
    [XmlElement("ID_KIS")]
    public long idKis { get; set; }

    [XmlElement("ID_ET")]
    public long idEt { get; set; }

}

[XmlRoot("ArrayOfErand")]
public class ErandTsivList 
{
    public ErandTsivList()
    {
        Erands = new List<ErandTsiv>();
    }
    [XmlElement("Erand")]
    public List<ErandTsiv> Erands { get; set; }
}

反序列化将是:

    var stream = new StringReader(x);
    var serializer = new XmlSerializer(typeof(ErandTsivList));
    var erandTsivs = (ErandTsivList)serializer.Deserialize(stream);
    // your List<ErandTsiv> would then be in erandTsivs.Erands

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM