Десериализация XML в несколько объектов одного типа (для приложения Windows 8)

Итак, я пытаюсь десериализовать следующий XML-документ в несколько объектов моего пользовательского типа (ItemModel). Поскольку я разрабатываю для платформы Windows 8, я столкнулся со многими блокировками из-за несовместимости библиотек. То, что я пытаюсь сделать, это десериализовать каждую ItemModel в объект, а затем добавить их в какой-то список. Из того, что у меня есть, код работает, но список не заполняется.

<?xml version="1.0" encoding="utf-8" ?>

<Items>
  <ItemModel>
    <ID>0</ID>
    <Name>Apple</Name>
    <Category>Compost</Category>
    <ImageWidth>67</ImageWidth>
    <ImageHeight>100</ImageHeight>
    <Description>An Apple is a compost item that....</Description>
    <ImagePath>Graphics\\apple.png</ImagePath>
  </ItemModel>
  <ItemModel>
    <ID>0</ID>
    <Name>Water Bottle</Name>
    <Category>Mixed Containers</Category>
    <ImageWidth>67</ImageWidth>
    <ImageHeight>100</ImageHeight>
    <Description>A Water bottle is a mixed container item that...</Description>
    <ImagePath>Graphics\\Bottle.png</ImagePath>
  </ItemModel>
</Items>

Примечание. У меня также возникают проблемы с использованием XmlReader. Это средство чтения, равное нулю, даже после того, как я использую XmlReader.Create().

Спасибо.


person YoussefE    schedule 04.12.2013    source источник
comment
Как вы получаете свои данные? Это строка, файл, поток?   -  person MarcinJuraszek    schedule 04.12.2013
comment
Из файла. Я не мог использовать FileStream, который использовался в большинстве примеров, потому что он не поддерживается.   -  person YoussefE    schedule 04.12.2013


Ответы (1)


если вы читаете файл .xml и отображаете его в веб-браузере, а ваш код написан на С#, вы можете сделать что-то вроде этого:

 protected void Page_Load(object sender, EventArgs e)
 {                 
      ReadXmlFile(Server.MapPath("~/XMLFiles/Items.xml"));
 }

 private void ReadXmlFile(string fileName)
 {
    string parentElementName = "";
    string childElementName = "";
    string childElementValue = "";
    bool element = false;
    lblMsg.Text = "";

    XmlTextReader xReader = new XmlTextReader(fileName);
    while (xReader.Read())
    {
        if (xReader.NodeType == XmlNodeType.Element)
        {
            if (element)
            {
                parentElementName = parentElementName + childElementName + "<br>";
            }
            element = true;
            childElementName = xReader.Name;
        }
        else if (xReader.NodeType == XmlNodeType.Text | xReader.NodeType == XmlNodeType.CDATA)
        {
            element = false;
            childElementValue = xReader.Value;
            lblMsg.Text = lblMsg.Text + "<b>" + parentElementName + "<br>" + childElementName + "</b><br>" + childElementValue;

            parentElementName = "";
            childElementName = "";
        }
    }
    xReader.Close();
  }
}
person Chandan Kumar    schedule 04.12.2013
comment
Спасибо за пример. Я не думаю, что XmlTextReader поддерживается .net для приложений магазина Windows (msdn.microsoft.com/en-us/library/System.Xml(v=vs.110).aspx). Вы случайно не знаете альтернатив? - person YoussefE; 04.12.2013
comment
обратитесь к этому stackoverflow.com/questions /9477158/ и здесь у вас есть ответ по этой внешней ссылке dandar3.blogspot.in/2011/11/ - person Chandan Kumar; 04.12.2013
comment
Windows Phone 8 — msdn.microsoft.com/en -us/libr...v=vs.105).aspx Windows 8 — msdn.microsoft.com/en-us/libr.../br230232.aspx - person Chandan Kumar; 04.12.2013