我无法反序列化xml文件,总有一些错误

时间:2014-07-16 11:21:47

标签: vb.net windows-phone-8 windows-store-apps

所以在我的winrt应用程序上我试图从我的一个应用程序文件夹中的xml文件中加载一个类而且我有一个问题,无论我做什么,总会出现问题,或者我有一个{{1或者我有missing file exception以下是我试图加载类的方法: path =" Data at the root level is invalid. Line 1, position 1."

<?xml version="1.0" encoding="utf-8" standalone="yes"?><cards></cards>
Dim instance As T Dim b As Byte() = Encoding.UTF8.GetBytes(path.ToString()) Dim Stream As New MemoryStream(b) Dim serializer As XmlSerializer = New XmlSerializer(Type) Dim reader As StreamReader = New StreamReader(Stream) instance = DirectCast(serializer.Deserialize(reader), T) Return instance 行上

我得到instance = DirectCast(serializer.Deserialize(reader), T) ..好吧让我们改为传递文件路径,在这种情况下路径=&#34; System.IO.FileNotFoundException&#34;

ms-appx:///Data/cardsDB.xml

在同一行, Using reader2 As TextReader = New StringReader(path) Dim xml2 As New XmlSerializer(Type) instance = DirectCast(xml2.Deserialize(reader2), T) End Using Return instance ,在这种情况下,我得到instance = DirectCast(serializer.Deserialize(reader), T),这实际上是正确的,因为如果我调试该行并打开Data at the root level is invalid. Line 1, position 1.选项,我可以看到{{1现在我真的迷失在这里,如果我通过一条路径,我无法看到xml,当我通过xml我无法找到文件..有人可以解释我怎么做:(

另外在旁注时,当使用wpf在vb中进行im编程时,streamreader可以获取字符串作为参数,在winrt上,streamreader只能获得io.stream ..

上面使用的类是我所拥有的标准类,并且在我的所有wpf应用程序中都使用它并且效果很好,只有在winrt上我才会感到痛苦。

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,在xml文件的属性中,构建操作应该是内容。

然后,要打开一个内容文件,你需要做这样的事情(对不起它在C#中,因为我不太了解VB语法):

var uri = new Uri("ms-appx:///Data/cardsDB.xml", UriKind.Absolute);
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
var stream = await file.OpenStreamForReadAsync();

注意: OpenStreamForReadAsync是一种扩展方法,您需要添加using System.IO;。此外,添加此代码的方法必须是异步。

现在您只需要将此stream变量传递给XmlSerializer的Deserialize方法。