2017-01-03 2 views
-1

Этот массив:Чтение из XML в словарь с помощью XmlSerializer?

public List<Publisher> Publishers 
{ 
    get { return _Publishers; } 
    set { _Publishers = value; } 
} 
private List<Publisher> _Publishers; 

используется XmlSerializer для хранения данных в файле XML.

Но с точки зрения использования приложения мне действительно нужен Dictionary<string, Publisher>, так что я могу быстро найти нужный объект Publisher на основе имени.

Теперь я понимаю, что я не могу сделать это напрямую, используя XMLSerializer, и что именно поэтому я использую List. Есть ли какой-либо опрятный способ достичь желаемого, как только данные будут прочитаны из XML-файла?

Я понимаю, что могу перебирать список и строить словарь. Но есть ли альтернатива?

+0

Создание словаря из вашего массива и сериализовать его для хранения данных .... –

+0

Но я использую файл XML в качестве моей основной базы данных здесь, который читает в/из массива. Объект словаря является временным объектом для управления этим списком при запуске моего приложения. –

+0

это то, что вам нужно https://github.com/Atlas-Project/AtlasXmlSerializer –

ответ

1

Я думаю, что подход будет состоять в том, чтобы поддержать его со словарем и представить List для сериализации. Как это:

public List<Publisher> Publishers 
{ 
    get { return _PublishersDictionary.Select(x => x.Value).ToList(); } 
    set { _publishersDictionary = value.ToDictionary(x => x.Name, x => x); } 
} 
private Dictionary<string, Publisher> _publishersDictionary; 

[XmlIgnore] 
public Dictionary<string, Publisher> PublisherDictionary 
{ 
    get { return _publishersDictionary; } 
} 
+0

Я получаю пустой XML, когда использую этот подход. –

+0

Как выглядит ваш конструктор из интереса? – Stuart

+0

Для класса издателя? У него нет. –

1

Это поможет.

public List<Publisher> Publishers 
    { 
     get { return _Publishers; } 
     set { _Publishers = value; } 
    } 
    private List<Publisher> _Publishers; 

    private Dictionary<string, Publisher> _PublishersDictionary; 
    public Dictionary<string, Publisher> PublisherDictionary 
    { 
     get 
     { 
      if(this._PublishersDictionary == null) 
      { 
       this._PublishersDictionary = this.Publishers.ToDictionary(p => p.Name, p => p); 
      } 

      return this._PublishersDictionary; 
     } 
    } 

код Найден от Converting linq query to dictionary я просто пропустил результат запроса LINQ части.

Также, если вы сериализуете это обратно в xml, серилизатор должен игнорировать это свойство, поскольку он не имеет сеттера, но вы также можете добавить атрибут [xmlIgnore] выше этого свойства.

+0

Спасибо. Я попробую это. –

Смежные вопросы