XML, Linq to Class - PullRequest
       1

XML, Linq to Class

1 голос
/ 18 марта 2011

Как и в коде, мне нужно проанализировать xml и получить тип ContactData. Моя цель состоит в том, чтобы проанализировать простой список контактов, как показано в коде, но без указания данных структуры, таких как закомментированный код.

Если я пытаюсь использовать закомментированный код, я получаю исключение, которое не произойдет, если я использую только код ниже:

            XDocument xmlDocument = XDocument.Parse(data);
            var result = from entry in xmlDocument.Descendants("contact")
            select new ContactData
            {
                //Data = (Dictionary<string,object>)(from element in entry.Elements() select new Dictionary<string, object>().ToDictionary(o => o.Key, o => o.Value)),

                Data = new Dictionary<string, object>
                {
                    {"uid", entry.Element("uid").Value},
                    {"name", entry.Element("name").Value},
                    {"email", entry.Element("email").Value},
                    {"message", entry.Element("message").Value},
                    {"state", entry.Element("state").Value}
                },                
                State = (States)Enum.Parse(typeof(States), entry.Element("state").Value)
            };
            return result.ToArray<ContactData>();

Как это исправить?

Data = (Dictionary<string,object>)(from element in entry.Elements() select new Dictionary<string, object>().ToDictionary(o => o.Key, o => o.Value))

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Я подозреваю, что вы действительно хотите:

Dictionary<string,string> data = (from element in entry.Elements() select element)
                                    .ToDictionary(x => x.Name.ToString(), x => x.Value);

или короче:

Dictionary<string,string> data = entry.Elements()
                                      .ToDictionary(x => x.Name.ToString(), 
                                                    x => x.Value);
3 голосов
/ 18 марта 2011

Попробуйте

 Data = entry.Elements().ToDictionary(e => e.Name.ToString(), e => e.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...