所以在我的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上我才会感到痛苦。
谢谢。
答案 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
方法。