问题描述
我在尝试将XML文件反序列化为C#中的对象时遇到问题。我在代码的最后一行收到以下错误:
System.FormatException:'输入字符串的格式不正确。'
当我遇到异常并且将鼠标悬停在reader2上时,它说:
“空格,值=” \ n“
这是我的代码示例:
public static void LoadXML(string SIMDURL,string PREMURL)
{
var MyDownloadedFile = new MemoryStream(new WebClient().DownloadData(SIMDURL));
XmlSerializer reader = new XmlSerializer(typeof(Simulcast.EntryRaceCard));
var reader2 = XmlReader.Create(MyDownloadedFile);
Simulcast.EntryRaceCard overview;
overview = (Simulcast.EntryRaceCard)reader.Deserialize(reader2);
}
解决方法
您需要XML的适当类模型。最简单的方法是下载将整个XML文档复制到剪贴板,然后使用Visual Studio的“将XML作为类粘贴”功能。只需创建一个空的命名空间来包含类,然后将类定义粘贴到其中即可。
或者,您可以使用XML Schema Definition Tool (Xsd.exe)从XML文档生成类。
然后您拥有的代码将起作用
class Program
{
static WebClient wc = new WebClient();
public static Simulcast.EntryRaceCard LoadXML(string url)
{
var MyDownloadedFile = new MemoryStream(wc.DownloadData(url));
XmlSerializer reader = new XmlSerializer(typeof(Simulcast.EntryRaceCard));
var reader2 = XmlReader.Create(MyDownloadedFile);
var overview = (Simulcast.EntryRaceCard)reader.Deserialize(reader2);
return overview;
}
static void Main(string[] args)
{
var url = "https://2m2pperformanceblob.blob.core.windows.net/simdpremcontainer/SIMD20201024KEE_USA.xml";
var overview = LoadXML(url);
}
}
,
我使用以下代码对您的URL反序列化。我使用xsd.exe从位于XML顶部的架构中创建类
--http://ifd.equibase.com/schema/simulcast.xsd
我不得不将一个私有属性设为私有,这不能消除错误
/// <remarks/>
private EntryRaceGrade Grade {
get {
return this.gradeField;
}
set {
this.gradeField = value;
}
}
这是代码
const string URL = "https://2m2pperformanceblob.blob.core.windows.net/simdpremcontainer/SIMD20201024KEE_USA.xml";
static void Main(string[] args)
{
XmlReader xReader = XmlReader.Create(URL);
XmlSerializer serializer = new XmlSerializer(typeof(RaceCard));
RaceCard raceCard = (RaceCard)serializer.Deserialize(xReader);
}