在C#中将XML反序列化为对象时没有数据

时间:2016-04-27 19:18:24

标签: .net xml serialization

您好我正在尝试将XML文件反序列化为对象,但我没有得到任何值。我认为类模型存在问题。 当我运行它时,我得不到生成的对象中填充的数据。

 public static class XMLHelper
{
    public static T FromXML<T>(XDocument data)
    {
        var xmlSerializer = new XmlSerializer(typeof(T));
        using (var reader = data.CreateReader())
        {
            return (T)xmlSerializer.Deserialize(reader);
        }               
    }
}

结构是正确的 enter image description here

这是我的xml看起来像我无法改变它。 XMLFile

我的反序列化程序

[XmlRoot("XmlSports")]
public class XmlSportsModel
{  
    [XmlElement("Sport")]
    public SportModel[] Sports { get; set; }       
}

    public class SportModel
{
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "ID")]
    public string Id { get; set; }
    [XmlElement(ElementName = "Event")]
    public EventModel[] Events { get; set; }
}


   public class EventModel
{
    [XmlElement("Name")]
    public string Name { get; set; }
    [XmlElement("ID")]
    public int Id { get; set; }
    [XmlElement("CategoryID")]
    public int CategoryId { get; set; }
    [XmlElement("IsLive")]
    public bool IsLive { get; set; }
    [XmlElement("Match")]
    public MatchModel[] Matches { get; set; }
}

 public class MatchModel
{
    [XmlElement("Name")]
    public string Name { get; set; }
    [XmlElement("ID")]
    public int Id { get; set; }
    [XmlElement("StartDate")]
    public DateTime StartDate { get; set; }
    [XmlElement("MatchType")]
    public MatchType Matchtype { get; set; }
    [XmlElement("Bet")]
    public BetModel[] Bets { get; set; }
}

public enum MatchType
{
    PreMatch,
    Live
}

我的模特

 <html>
   <body>
      <div class="somethingunneccessary"></div>
      <div class="container">
         <div>
            <p>text1</p>
            <p>text2</p>
            <p>text3</p>
         </div>
         <div>
            <p>text4/p>
            <p>text5</p>
            <p>text6</p>
         </div>
         <div>
            <p>text7</p>
            <p>text8</p>
            <p>text9</p>
         </div>
         <div>
            <p>text10</p>
            <p>text11</p>
            <p>text12</p>
         </div>
         <div>
            <p>text13</p>
            <p>text14</p>
            <p>text15</p>
         </div>
      </div>
   </body>
 </html>

1 个答案:

答案 0 :(得分:0)

在Visual Studio 2012及更高版本中,您可以使用XML并转到Edit - &gt;选择性粘贴 - &gt;将XML粘贴为类。如果你没有它,网上有一些工具可以帮助你。

只是为了帮助转换,这是XML粘贴的结果:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class XmlSports
{

    private XmlSportsSport[] sportField;

    private System.DateTime createDateField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Sport")]
    public XmlSportsSport[] Sport
    {
        get
        {
            return this.sportField;
        }
        set
        {
            this.sportField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public System.DateTime CreateDate
    {
        get
        {
            return this.createDateField;
        }
        set
        {
            this.createDateField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class XmlSportsSport
{

    private XmlSportsSportEvent[] eventField;

    private string nameField;

    private ushort idField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Event")]
    public XmlSportsSportEvent[] Event
    {
        get
        {
            return this.eventField;
        }
        set
        {
            this.eventField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public ushort ID
    {
        get
        {
            return this.idField;
        }
        set
        {
            this.idField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class XmlSportsSportEvent
{

    private XmlSportsSportEventMatch[] matchField;

    private string nameField;

    private ushort idField;

    private ushort categoryIDField;

    private bool isLiveField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Match")]
    public XmlSportsSportEventMatch[] Match
    {
        get
        {
            return this.matchField;
        }
        set
        {
            this.matchField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public ushort ID
    {
        get
        {
            return this.idField;
        }
        set
        {
            this.idField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public ushort CategoryID
    {
        get
        {
            return this.categoryIDField;
        }
        set
        {
            this.categoryIDField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool IsLive
    {
        get
        {
            return this.isLiveField;
        }
        set
        {
            this.isLiveField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class XmlSportsSportEventMatch
{

    private XmlSportsSportEventMatchBet[] betField;

    private string nameField;

    private uint idField;

    private System.DateTime startDateField;

    private string matchTypeField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Bet")]
    public XmlSportsSportEventMatchBet[] Bet
    {
        get
        {
            return this.betField;
        }
        set
        {
            this.betField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public uint ID
    {
        get
        {
            return this.idField;
        }
        set
        {
            this.idField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public System.DateTime StartDate
    {
        get
        {
            return this.startDateField;
        }
        set
        {
            this.startDateField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string MatchType
    {
        get
        {
            return this.matchTypeField;
        }
        set
        {
            this.matchTypeField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class XmlSportsSportEventMatchBet
{

    private XmlSportsSportEventMatchBetOdd[] oddField;

    private string nameField;

    private uint idField;

    private bool isLiveField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Odd")]
    public XmlSportsSportEventMatchBetOdd[] Odd
    {
        get
        {
            return this.oddField;
        }
        set
        {
            this.oddField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public uint ID
    {
        get
        {
            return this.idField;
        }
        set
        {
            this.idField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool IsLive
    {
        get
        {
            return this.isLiveField;
        }
        set
        {
            this.isLiveField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class XmlSportsSportEventMatchBetOdd
{

    private string nameField;

    private uint idField;

    private decimal valueField;

    private decimal specialBetValueField;

    private bool specialBetValueFieldSpecified;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public uint ID
    {
        get
        {
            return this.idField;
        }
        set
        {
            this.idField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public decimal Value
    {
        get
        {
            return this.valueField;
        }
        set
        {
            this.valueField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public decimal SpecialBetValue
    {
        get
        {
            return this.specialBetValueField;
        }
        set
        {
            this.specialBetValueField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool SpecialBetValueSpecified
    {
        get
        {
            return this.specialBetValueFieldSpecified;
        }
        set
        {
            this.specialBetValueFieldSpecified = value;
        }
    }
}

使用的代码只是:

XDocument test = XDocument.Load("sportxml.xml");
var result = XMLHelper.FromXML<XmlSports>(test);
相关问题