Object reference not set to an instance of an object XML document object c#

329
12 апреля 2017, 11:38

Xml-документ, необходимо воссоздать объект по его структуре

  • У каждого элемента Chapter есть Position .
  • Position имеет один элемент Resources.
  • В Resources есть Tzr и Mat, но не в каждом Position

Классы создаю такие

class Position
{
    public string Caption { get; set; }
    public string Quantity { get; set; }
    public List<Tzr> tzrCollection { get; set; } 
}    
class Chapter
{
    public string Caption { get; set; }
    public int Age { get; set; }
    public List<Position> positions { get; set; }     
}
class Tzr
{
    public string Caption { get; set; }
}

Вопрос - как добраться до tzr или mat, если имеются Position без mat или tzr? Если обращаться криво (мои способом) - то возвращает ошибку

 XDocument doc = XDocument.Load("Data.xml");
        var chapters = from c in doc.Element("Document").Element("Chapters").Elements("Chapter")
                       select new Chapter
                       {
                           Caption = c.Attribute("Caption").Value,
                           positions = (from p in c.Elements("Position")
                                        select new Position
                                        {
                                            Caption = p.Attribute("Caption").Value,
                                            Quantity = p.Attribute("Quantity").Value,
                            tzrCollection = (from t in p.Element("Resources").Elements("Mat")
                                                where t != null
                                                select new Tzr
                               {
                                    Caption = t.Attribute("Caption").Value
                               }).ToList()
                                         }).ToList()
                       };
Answer 1

Xml-документ, необходимо воссоздать объект по его структуре

Это называется десериализация.

В твоем случае нужно до конца описать структуру xml-файла, т. е. добавить еще один класс Document:

    public class Document
    {
        public List<Chapter> Chapters { get; set; }
    }

Дальше десериализуем:

        XmlSerializer serializer = new XmlSerializer(typeof(Document));
        XmlTextReader xr = new XmlTextReader(@"path\to\Data.xml");
        Document doc = (Document)serializer.Deserialize(xr); // получаем объект из xml
        List<Chapter> chapters = doc.Chapters; // получаем список объектов Chapter
READ ALSO
Экранирование запроса

Экранирование запроса

Есть проблема с экранированием названий столбцовЕсли я хочу сделать название столбца на русском то в запросе я должен это название заключить...

296
Cannot insert the OpenXmlElement &ldquo;newChild&rdquo; because it is part of a tree

Cannot insert the OpenXmlElement “newChild” because it is part of a tree

Добрый вечер уважаемые знатокиПодскажите где закралась ошибка

652
Нет доступа к папке Azure (ASP.NET MVC)

Нет доступа к папке Azure (ASP.NET MVC)

У меня есть веб-приложение, которое записывает видеофайлы в папку внутри проекта

364
Вставка текста в textbox

Вставка текста в textbox

Можно ли запретить вставлять текст (ctrl+v) в textbox? Если да, то каким образом?

375