Не верно читается XML файл

257
10 февраля 2020, 22:50

Необходимо десериализовать данные из текущего xml документа. Я взял готовый xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <address>24</address>
 <city>New-York</city>
 <state>Alabama</state>
<firstPerson>
 <age>19</age>
 <name>Jey</name>
 <department>none</department>
</firstPerson>
 <secondPerson>
 <age>22</age>
 <name>Abraham</name>
 <department>none</department>
 </secondPerson>
</root>

и по нему сгенерировал по нему модель

[XmlRoot(ElementName="firstPerson")]
public class FirstPerson {
    [XmlElement(ElementName="age")]
    public string Age { get; set; }
    [XmlElement(ElementName="name")]
    public string Name { get; set; }
    [XmlElement(ElementName="department")]
    public string Department { get; set; }
}
[XmlRoot(ElementName="secondPerson")]
public class SecondPerson {
    [XmlElement(ElementName="age")]
    public string Age { get; set; }
    [XmlElement(ElementName="name")]
    public string Name { get; set; }
    [XmlElement(ElementName="department")]
    public string Department { get; set; }
}
[XmlRoot(ElementName="root")]
public class Root {
    [XmlElement(ElementName="address")]
    public string Address { get; set; }
    [XmlElement(ElementName="city")]
    public string City { get; set; }
    [XmlElement(ElementName="state")]
    public string State { get; set; }
    [XmlElement(ElementName="firstPerson")]
    public FirstPerson FirstPerson { get; set; }
    [XmlElement(ElementName="secondPerson")]
    public SecondPerson SecondPerson { get; set; }
}

Так как параметры (возраст и тд) одинаковые, я переделал модель данных

 [Serializable]
[XmlRoot(ElementName="root")]
public class People
{
    public byte Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    [XmlElement(ElementName = "firstPerson")]
    public Person FirstPerson { get; set; }
    [XmlElement(ElementName = "secondPerson")]
    public Person SecondPerson { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "root")]
public class Person
{
    public byte Age { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
}

После чего читаю xml:

internal class Program
{
    private const string xmlPath = "test.xml";
    private static void Main(string[] args)
    {
        var value = DeserializeSettings();
        Console.WriteLine(value.Address);
        Console.WriteLine(value.City);
        Console.WriteLine(value.State);
        Console.WriteLine(value.FirstPerson.Age);
        Console.WriteLine(value.FirstPerson.Name);
        Console.WriteLine(value.FirstPerson.Department);
        Console.ReadKey();
    }
    private static People DeserializeSettings()
    {
        try
        {
            var serializer = new XmlSerializer(typeof(People));
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, xmlPath);
            var reader = new StreamReader(path);
            var people = (People) serializer.Deserialize(reader);
            reader.Close();
            return people;
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            return new People();
        }
    }
}

В итоге получаю 0 или пустоту (в зависимости от типа данных), где я ошибся?

Answer 1

Верните всем свойствам атрибут [XmlElement(ElementName="age")] и т. п.

Дело в том, что XML является регистро-зависимым (case-sensitive). То есть Age и age - разные узлы.

Поэтому либо обязательно нужно указывать атрибуты XmlElement, либо изменить имена свойств в C# (но по гайдлайнам они должны начинаться с большой буквы, поэтому так не следует делать), либо изменить сам xml.

READ ALSO
Можно ли кастить long/double во float? Или long в double C#?

Можно ли кастить long/double во float? Или long в double C#?

Получаю json по api преобразовываю в структуру, но там получается вложенные массивы и нужно это переконвертить в нужный мне классНо данные приходят...

222
Как сделать ajax запрос в UrlAction?

Как сделать ajax запрос в UrlAction?

У меня на странице есть две переменные

218
Как изменить ContentControl изнутри, в UserControl

Как изменить ContentControl изнутри, в UserControl

Только пытаюсь разобраться с Wpf MVMMЕсть такая разметка

198
The INSERT statement conflicted with the FOREIGN KEY constraint

The INSERT statement conflicted with the FOREIGN KEY constraint

Personcs (сущность персоны):

180