【发布时间】:2021-11-05 23:53:26
【问题描述】:
我想在包含属性和列表的嵌套类中取消实现此 XML:
<BetradarLiveOdds timestamp="1630916055900" status="meta">
<Match active="0" booked="0" matchid="22546" status="ended">
<MatchInfo>
<DateOfMatch>16309114325</DateOfMatch>
<Sport id="32">Bos</Sport>
<Category id="266">Interonal</Category>
<Tournament id="99000526">Grd Pix 221</Tournament>
<HomeTeam id="45179">Mrk Roal</HomeTeam>
<AwayTeam id="41325">Mathew Whrs</AwayTeam>
<TvChannels />
</MatchInfo>
<Translation>
<Sport id="32">
<Name lang="en">Bols</Name>
<Name lang="it">Bols</Name>
</Sport>
<Category id="266">
<Name lang="en">Interonal</Name>
<Name lang="it">Internanale</Name>
</Category>
<Tournament id="99000526">
<Name lang="en">Grand Prix 2021</Name>
<Name lang="it">Grand Prix 2021</Name>
</Tournament>
<HomeTeam id="45179">
<Name lang="en">Mark Royal</Name>
<Name lang="it">Mark Royal</Name>
</HomeTeam>
<AwayTeam id="41325">
<Name lang="en">Matthew Whyers</Name>
<Name lang="it">Matthew Whyers</Name>
</AwayTeam>
</Translation>
</Match>
</BetradarLiveOdds>
我创建了多个可序列化的类:
[Serializable()]
public class BetradarLiveOdds
{
[XmlAttribute("timestamp")]
public long Timestamp { get; set; }
[XmlAttribute("status")]
public string Status { get; set; }
[XmlArrayItem("match")]
public List<Match> Matchs { get; set; }
}
[Serializable()]
public class Match
{
[XmlAttribute("active")]
public bool Active { get; set; }
[XmlAttribute("booked")]
public bool Booked { get; set; }
[XmlAttribute("matchid")]
public Int32 MatchId { get; set; }
[XmlAttribute("status")]
public string Status { get; set; }
[XmlElement("matchinfo")]
public MatchInfo MatchInfo { get; set; }
[XmlElement("translation")]
public List<Translation> Translations { get; set; }
}
还有其他小课程(运动、锦标赛、主场……)。
我尝试:当我尝试反序列化时:
static void Main(string[] args)
{
XmlSerializer serializer = new XmlSerializer(typeof(BetradarLiveOdds));
BetradarLiveOdds bet;
FileStream fs = new FileStream("C:\\src\\bet2020\\RD_Live_Parsing\\meta\\hi.xml", FileMode.Open);
bet = (BetradarLiveOdds)serializer.Deserialize(fs);
serializer.Serialize(Console.Out, bet);
}
BetradarLiveOdds 打印正常,但匹配为空。
有谁知道如何修改类或主要使其工作。如何取消实现文件?
【问题讨论】:
-
序列化你的类。如果 XML 与您尝试反序列化的 XML 不匹配,您就知道问题出在哪里。
-
我认为问题出在“BetradarLiveOdds”中,但我不知道如何解决
-
在您的课程中,您使用了
List,但XML 没有显示任何重复(例如多个Match)。 -
因为即使 xml 有更多匹配项,该程序也应该可以工作。
-
您需要注意区分大小写。
[XmlArrayItem("match")]应该是[XmlArrayItem("Match")]。
标签: c# xml list serialization deserialization