需要帮助将 XML 文件反序列化为对象 C#
Posted
技术标签:
【中文标题】需要帮助将 XML 文件反序列化为对象 C#【英文标题】:Need help Deserializing XML file to Object C# 【发布时间】:2021-02-13 22:55:31 【问题描述】:我在尝试将 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 的 URL:2m2pperformanceblob.blob.core.windows.net/simdpremcontainer/… 这是您期望的,但可能不是new WebClient().DownloadData
实际上返回的结果。
@HimBromBeere 你能帮我写一个子程序来反序列化这个 xml 文档吗?我认为这里的另一个问题是两个命名空间。
【参考方案1】:
您需要一个适当的 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);
【讨论】:
【参考方案2】:我使用以下代码反序列化您的 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);
【讨论】:
以上是关于需要帮助将 XML 文件反序列化为对象 C#的主要内容,如果未能解决你的问题,请参考以下文章
将 xml 反序列化为 c# 对象时,XML 文档 (2, 2) 出现错误