0

すべて、ゲームをロードする前に、リモート Web サービスから XML データを取得する Windows Phone ゲームに取り組んでいます。これにより、ゲームが使用するデータの一部が随時更新されます。その部分はうまく機能します。Web サービスからデータを取得したら、次を使用します。

    void Response_Completed(IAsyncResult result)
    {
        HttpWebRequest request = (HttpWebRequest)result.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
        using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            string xml = streamReader.ReadToEnd();
            using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
            {
                reader.MoveToContent();
                reader.GetAttribute(0);
                reader.MoveToContent();
                webMessage = reader.ReadInnerXml();

これで、webMessage 文字列変数に XML の文字列を取得できました。次に、それを IsolatedStorage のファイルに書き込みます。再び素晴らしい作品。私の問題は、データを読みに行くときです:

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Test.xml", FileMode.Open)) 
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Item>));
List<Item> data = (List<Item>)serializer.Deserialize(stream);

foreach (Item item in data)
{

    System.Diagnostics.Debug.WriteLine(item.Item);
}

} 
}

したがって、問題は、ファイルが分離ストレージに書き込まれるときに、すべての XML マークアップがエスケープされるため、ファイルを読み取るときに、"<" ではなく %lt; を読み取ることです。これにより、デシリアライズが失敗し、無効な文字が報告されます。Web サービスから取得した XML のループを回避しようとしていますが、これは無駄に思えます。自分のサーバーから取得した有効な XML であることはわかっています。Web サービスから取得している XML を取得して、IsolatedStorage のファイルに一度に書き込む方法を知っている人はいますか?

前もって感謝します。

4

1 に答える 1

0

最終的に、Web サービスから返された XML 要素をループ処理することで、シリアライズ可能なカスタム オブジェクトを作成しました。それほど多くのコードではありませんでした:

        HttpWebRequest request = (HttpWebRequest)result.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
        using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            string xml = streamReader.ReadToEnd();
            using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
            {


                reader.MoveToContent();
                while (reader.Read())
                {

                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        string objectItem = reader.ReadElementContentAsString();
                        webData.Add(new CustomObject() { Item = objectItem });

                    }
                }
       }
于 2012-05-07T19:12:44.550 に答える