2014-11-28 3 views
-1

У меня есть объект GameOptions, который содержит список Tiles и список опций. Один объект GameOptions кладется в список, который я тогда сериализовать дать мне формат, который напоминает это:Метод десериализации объекта, который содержит списки других объектов

<GameOptions> 
    <Tiles> 
     <Tile1> 
     </Tile1> 
    </Tiles> 
    <Options> 
     <Option1> 
     </Option1> 
    <Options> 
</GameOptions> 

Я интересно, как я могу deseialize сохраненный файл обратно в объект GameOptions, который я может получить доступ к значениям Плитки и Параметры? Раньше, когда мне нужно было читать XML-файл, я только что загрузил документ, прошел через каждый узел и скопировал значение, однако я не думаю, что этот метод будет работать снова, потому что некоторые узлы принадлежат классу Tile, в то время как другие принадлежат классу «Параметры». Заранее спасибо!

Это код, который я использовал для сериализации в первую очередь:

XmlSerializer serializer = new XmlSerializer(gameSave.GetType()); 
StreamWriter writer = new StreamWriter(@"savedmap.xml"); 
serializer.Serialize(writer.BaseStream, gameSave); 
+0

'Мне интересно, как могу ли я deseialize сохраненного файла' Использовать XmlSerializer. Но лучше, прежде чем задаться вопросом, прочитать некоторые документы о xml. –

+1

Все, что вы сериализуете в допустимом формате xml или json, может быть тривиально десериализовано с помощью того же механизма. Что вы использовали для сериализации? И что вы пытались десериализировать? –

+0

Как и в случае с кодом, схема должна в целом содержать _not_ include 'Tile1',' Tile2', ..'TileN' свойства/ключи. Существует стандартная обработка коллекции как в структурах XML, так и в JSON. В любом случае единственным требованием является то, что десериализатор знает, как «отменить» сериализацию, которая должна определяться набором правил .. что вы (или лучше, стандартная библиотека сериализации). – user2864740

ответ

0

Это, возможно, потребуется немного настройки, но вот приблизительная реализация десериализации:

private GameOptions Deserialize() 
    { 

     var serializer = new XmlSerializer(typeof(GameOptions)); 
     using (var reader = new StreamReader(@"savedmap.xml")) 
     { 
      return (GameOptions)serializer.Deserialize(reader); 
     } 
    } 
Смежные вопросы