0

Это следующий вопрос от How to create an empty xml in Windows Phone 8.System.InvalidOperationException при чтении из xml в WP8

Я сделал это, чтобы создать XML:

public void create() 
    { 
     List<DataModel> __dataList = new List<DataModel>(); 

     XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); 
     xmlWriterSettings.Indent = true; 

     using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Data.xml", FileMode.Create)) 
      { 
       XmlSerializer serializer = new XmlSerializer(typeof(List<DataModel>)); 
       using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings)) 
       { 
        serializer.Serialize(stream, __dataList); 
       } 
      } 
     } 
    } 

Когда я пытаюсь прочитать его с этим кодом, я получаю еще один System.InvalidOperationException

public void read() 
    { 
     List<DataModel> __dataList = new List<DataModel>(); 
     try 
     { 
      using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Data.xml", FileMode.Open)) 
       { 
        XmlSerializer serializer = new XmlSerializer(typeof(List<DataModel>)); 
        __dataList = (List<DataModel>)serializer.Deserialize(stream); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      string s = e.Message; 
      e.ToString(); 
     } 
    } 

Сообщение исключение «Существует ошибка в XML-документ (2, 118). " Что не так с моим кодом?

Редактировать: Внутреннее исключение: «Данные на корневом уровне недействительны. Строка 2, позиция 118.»

Edit 2: Я прочитал содержимое XML с использованием StreamReader.ReadToEnd() перед тем десериализации и это возвращенная строка: <?xml version="1.0" encoding="utf-8"?> <ArrayOfDataModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

Это мой первый раз работает с XML, поэтому вопрос может быть простым но я не могу этого понять. Любая помощь?

+0

Вы должны попытаться отобразить содержимое вашего XML-файла, чтобы понять, что происходит –

+2

В частности, a: что находится в файле xml в (2,118) и b: что такое '.InnerException.Message', '.InnerException.InnerException.Message',' .InnerException.InnerException.InnerException.Message' и т. Д.? 'XmlSerializer' фактически дает ** действительно действительно ** подробные сообщения: вам просто нужно посмотреть несколько уровней дальше в' Exception' –

+0

@KooKiz, где будет храниться XML-файл? –

ответ

0

Есть ли код, приведенный ниже также вы можете скопировать код? И какова конструкция DataModel?

 public void create() 
    { 
    List<DataModel> __dataList = new List<DataModel>(); 

    //XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); 
    //xmlWriterSettings.Indent = true; 

    using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Data.xml", FileMode.Create)) 
     { 
      try 
      { 
       XmlSerializer serializer = new XmlSerializer(typeof(List<DataModel>)); 
       //using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings)) 
       //{ 
       serializer.Serialize(stream, __dataList); 
       //} 
      } 
      catch { } 
     } 
    } 
    } 

    public void read() 
    { 
    List<DataModel> __dataList = new List<DataModel>(); 
    try 
    { 
     using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Data.xml", FileMode.Open)) 
      { 
       XmlSerializer serializer = new XmlSerializer(typeof(List<DataModel>)); 
       __dataList = (List<DataModel>)serializer.Deserialize(stream); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     string s = e.Message; 
     e.ToString(); 
    } 
    } 

И где:

public class DataModel 
{ } 

Этот код выше работает для меня.

+0

Моя проблема не в методе 'create()', а в методе 'read()'. –

+0

Я думаю, проблема в XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; Сделайте это без xmlWriter - так же, как я описал выше. Я только что попробовал, и он работает. Даже с OpenFile() – Romasz

+0

Я вынул строку 'XmlWriterSettings', и теперь исключение выглядит следующим образом:« В документе XML есть ошибка (0, 0) ». Внутреннее исключение гласит: «Отсутствует элемент корня». –

Смежные вопросы