Как десериализовать список из файла XML - PullRequest
0 голосов
/ 09 мая 2018

Список сериализуется следующим кодом:

        var serializer = new DataContractSerializer(typeof(List<Car>));
        using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(XMLFILENAME, CreationCollisionOption.ReplaceExisting))
        {
            serializer.WriteObject(stream, Cars);
        }

Файл XML выглядит следующим образом:

<ArrayOfCar xmlns="http://schemas.datacontract.org/2004/07/DataSerialize" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Car><Id>1</Id><Make>Oldsmobile</Make><Model>Cutlas Supreme</Model><Year>1985</Year></Car>

Мне нужно не только привязать эти данные к ListView, но и создать объект (List<Car>) на основе этого файла.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Использовать xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            new Car(FILENAME);
        }
    }
    public class Car
    {
        public static List<Car> cars = null;

        public int id { get; set;}
        public string make { get; set;}
        public string model { get; set;}
        public int year { get; set;}

        public Car() { }
        public Car(string filename)
        {
            XDocument doc = XDocument.Load(filename);
            cars = doc.Descendants().Where(x => x.Name.LocalName == "Car").Select(x => new Car()
            {
                id = x.Elements().Where(y => y.Name.LocalName == "Id").Select(y => (int)y).FirstOrDefault(),
                make = x.Elements().Where(y => y.Name.LocalName == "Make").Select(y => (string)y).FirstOrDefault(),
                model = x.Elements().Where(y => y.Name.LocalName == "Model").Select(y => (string)y).FirstOrDefault(),
                year = x.Elements().Where(y => y.Name.LocalName == "Year").Select(y => (int)y).FirstOrDefault(),
            }).ToList();

        }
    }
}
0 голосов
/ 09 мая 2018

Предположительно, повторно открыть файл и:

var cars = (List<Car>)serializer.ReadObject(stream);

, затем привяжите свой пользовательский интерфейс к cars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...