【发布时间】:2015-07-01 22:21:58
【问题描述】:
我在反序列化过程中收到以下异常
异常:XML 文档中存在错误 (0, 0)。内部异常: 缺少根元素。
但据我所见,XML 文件对我来说看起来非常有效,我什至使用了验证器来验证它。而此时我没有找到任何解决方案或问题,我也是 C# 开发的新手。
<?xml version="1.0" encoding="utf-8"?>
<ListOfShows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<list>
<ShowData>
<UniqueId>0</UniqueId>
<Title>MoinMoin</Title>
<Subtitle>Montags bis Freitags | 10.30 Uhr | LIVE | #moinmoin</Subtitle>
<Description>Die Bohnen wünschen einen guten Morgen aus dem #moinmoin-Studio in Hamburg. Was steht in der Zeitung? Wie schmeckt der Kaffee? Habt ihr gut geschlafen? Diese und andere lebenswichtige Fragen beantworten euch die immer gut gelaunten Moderatoren von Rocket Beans TV.</Description>
<ImagePath>C:\Users\Simon\AppData\Local\Packages\a7251417-49a0-4960-845d-9227b525e0c1_ggxdvrfmnj0tt\moinmoin.png</ImagePath>
<Content>Die Bohnen wünschen einen guten Morgen aus dem #moinmoin-Studio in Hamburg. Was steht in der Zeitung? Wie schmeckt der Kaffee? Habt ihr gut geschlafen? Diese und andere lebenswichtige Fragen beantworten euch die immer gut gelaunten Moderatoren von Rocket Beans TV.</Content>
</ShowData>
<ShowData>
<UniqueId>1</UniqueId>
<Title>Bohn Jour</Title>
<Subtitle>Mittwochs | 20.15 Uhr | LIVE | #bohnjour</Subtitle>
<Description>Dieses sympathische Plausch und Show-Format ist Dreh- und Angelpunkt der Rocketbeanschen Woche. Unsere Bohnen manövrieren mit euch durch News, Gewinnspiele und allerhand Themen der Internetwelt, die sonst sicher zu kurz gekommen wären. Dazu gibt’s eine Band und Gäste... wenn sie sich trauen!</Description>
<ImagePath>C:\Users\Simon\AppData\Local\Packages\a7251417-49a0-4960-845d-9227b525e0c1_ggxdvrfmnj0tt\bohnjour.png</ImagePath>
<Content>Dieses sympathische Plausch und Show-Format ist Dreh- und Angelpunkt der Rocketbeanschen Woche. Unsere Bohnen manövrieren mit euch durch News, Gewinnspiele und allerhand Themen der Internetwelt, die sonst sicher zu kurz gekommen wären. Dazu gibt’s eine Band und Gäste... wenn sie sich trauen!</Content>
</ShowData>
<ShowData>
<UniqueId>2</UniqueId>
<Title>Almost Daily</Title>
<Subtitle>Dienstags und Samstags | 20.15 Uhr | #almostdaily</Subtitle>
<Description>Das Talkformat mit dem goldenen Tisch! Willkommen bei Almost Daily. Hier werden Themen ohne Tabus besprochen und Unterhaltsam aufbereitet. Eine Punchline jagt die nächste und wenn es um flotte Sprüche geht, dann macht unseren Jungs niemand etwas vor. Coole Konzepte und interessante Gäste. Die #1 Video-Talkrunde auf Twitch.</Description>
<ImagePath>C:\Users\Simon\AppData\Local\Packages\a7251417-49a0-4960-845d-9227b525e0c1_ggxdvrfmnj0tt\almostdaily.png</ImagePath>
<Content>Das Talkformat mit dem goldenen Tisch! Willkommen bei Almost Daily. Hier werden Themen ohne Tabus besprochen und Unterhaltsam aufbereitet. Eine Punchline jagt die nächste und wenn es um flotte Sprüche geht, dann macht unseren Jungs niemand etwas vor. Coole Konzepte und interessante Gäste. Die #1 Video-Talkrunde auf Twitch.</Content>
</ShowData>
<ShowData>
<UniqueId>3</UniqueId>
<Title>Kino+</Title>
<Subtitle>Donnerstags | 20.15 Uhr | #kinoplus</Subtitle>
<Description>Donnerstag ist Kino-Tag! Das bedeutet es ist wieder Zeit für Kino+. Hier bekommt ihr aktuelle Filmstarts, Trailer und News. Und wenn ihr Glück habt, haben wir auch was zu verlosen! Also holt euch euer Popcorn, schnappt euch ein Kaltgetränk eurer Wahl und lehnt euch zurück. Die Vorstellung geht gleich los.</Description>
<ImagePath>C:\Users\Simon\AppData\Local\Packages\a7251417-49a0-4960-845d-9227b525e0c1_ggxdvrfmnj0tt\kinoplus.png</ImagePath>
<Content>Donnerstag ist Kino-Tag! Das bedeutet es ist wieder Zeit für Kino+. Hier bekommt ihr aktuelle Filmstarts, Trailer und News. Und wenn ihr Glück habt, haben wir auch was zu verlosen! Also holt euch euer Popcorn, schnappt euch ein Kaltgetränk eurer Wahl und lehnt euch zurück. Die Vorstellung geht gleich los.</Content>
</ShowData>
</list>
</ListOfShows>
我使用以下类进行序列化。包含多个 ShowData 的 ListOfShows 类。
public class ListOfShows
{
public List<ShowData> list { get; set; }
public ListOfShows()
{
list = new List<ShowData>();
}
public XDocument generateXMLDocument()
{
var xml = new XDocument();
using (var writer = xml.CreateWriter())
{
var serializer = new XmlSerializer(typeof(ListOfShows));
serializer.Serialize(writer, this);
}
return xml;
}
}
public class ShowData
{
public ShowData()
{
}
public string UniqueId { get; set; }
public string Title { get; set; }
public string Subtitle { get; set; }
public string Description { get; set; }
public string ImagePath { get; set; }
public string Content { get; set; }
}
这是我进行反序列化的方法:
static public async Task<ListOfShows> readStoredShows()
{
String fileName = "storedShow.xml";
StorageFile file;
ListOfShows shows = null;
try
{
file = await file = await home.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
}
catch (FileNotFoundException ex)
{
Debug.WriteLine(ex.Message);
file = null;
}
catch (UnauthorizedAccessException ex)
{
Debug.WriteLine(ex.Message);
file = null;
}
if (file != null)
{
try
{
IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read);
readStream.Seek(0);
using (StreamReader reader = new StreamReader(readStream.AsStream()))
{
reader.DiscardBufferedData();
Debug.WriteLine("Reader:" + reader.ReadToEnd());
var serializer = new XmlSerializer(typeof(ListOfShows));
shows = serializer.Deserialize(reader) as ListOfShows;
}
}
catch (InvalidOperationException ex)
{
Debug.WriteLine("Exception: " + ex.Message);
Debug.WriteLine("Inner Exception: " + ex.InnerException.Message);
}
}
else
{
Debug.WriteLine("Ein Fehler ist während des Ladens aufgetreten");
}
return shows;
}
希望有人能帮我找到我的问题。
最好的问候
【问题讨论】:
-
听起来像
XmlSerializer开始反序列化,但不是从流的开头。您的信息流中是否有 rewind 选项或类似的选项? -
我可以使用 IRandomAccessStream 的 seek(ulong) 方法,它将流的位置设置为指定的值。你的意思是这样的吗?
-
在致电
Deserialize之前尝试这样做。 -
我在分配readStream后直接调用了该方法。结果是一样的,还是例外。
-
文件有效。我只是从一个文件中反序列化了它。所以这是流的问题。因为您使用的是
IRandomAccessStream,所以我猜您正在使用数据库。检查流是否正确连接到您的数据库。
标签: c# xml windows-store-apps xml-serialization xmlserializer