#c# #xml #parsing #dictionary #xna
#c# #xml #синтаксический анализ #словарь #xna
Вопрос:
Я очень новичок в сериализации XML, до сих пор я использовал XDocument и перебирал XML-файл для загрузки содержимого. Я знаю, что есть способ сериализовать XML-файлы, недавно я наткнулся на следующий фрагмент XML:
<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
<Asset Type="System.Collections.Generic.Dictionary[System.String, Microsoft.Xna.Framework.Rectangle]">
<Item><Key>frame0</Key><Value>0 0 128 128</Value></Item>
<Item><Key>frame1</Key><Value>128 0 128 128</Value></Item>
</Asset>
</XnaContent>
И пытался выяснить, как бы я загрузил это и проанализировал в словаре, верхняя часть с указанием типа ресурса =System.collections.generic.dictionary, похоже, предполагает, что я смогу быстро преобразовать это в словарь.
Итак, мой вопрос в том, как мне это сделать? Я мог бы легко выполнить итерацию по структуре xml и сопоставить ключи со значениями, но, похоже, был бы лучший способ сделать это?
Ответ №1:
Это на удивление просто. Добавьте XML-файл в свой контент-проект. Сохраните импортер по умолчанию («Содержимое XML») и процессор (отсутствует).
Конвейер содержимого XNA встроит его в XNB
файл для вас.
Затем просто загрузите его с помощью ContentManager.Load
, как и любой другой ресурс:
var myContent = Content.Load<Dictionary<string, Rectangle>>("MyXmlFile");
Ответ №2:
РЕДАКТИРОВАТЬ: Только что просмотрев эту статью и эту, я подозреваю, что вы хотите использовать либо IntermediateSerializer
, либо XmlImporter
.
Я не являюсь разработчиком XNA, и мне непонятно, как все это сочетается, но, надеюсь, этого достаточно, чтобы вы начали.
Конечно, если это был просто пример XML, и вы действительно хотите сериализовать данные, которые не являются частью XNA, вы можете захотеть взглянуть на XmlSerializer
. Лично я обнаружил, что проще управлять сериализацией вручную, используя LINQ to XML — таким образом проще управлять различными версиями и т.д., Но в некоторых случаях XmlSerializer
Было бы удобнее.