2016-03-17 2 views
2

Я пытаюсь внедрить систему XML для элементов в моей игре .. но я просто не могу заставить ее работать. Я использую Monogame и конвейер контента, который поставляется вместе с ним. Я создал класс инвентаря и класс предметов.Сериализация Monogame XML с конвейером контента

Вот фрагменты из класса Inventory (которые имели бы сериализации):

public class Inventory 
{  
    [XmlElement("Item")] 
    public static List<Item> itemList; 

    public Inventory (Vector2 _position) 
    { 
     itemList = new List<Item>(); 
    } 

    public void LoadContent() 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(Item)); 
     TextReader reader = new StreamReader("Content/Items/itemEntities.xml"); 
     object obj = deserializer.Deserialize(reader); 
     Inventory XmlData = (Inventory)obj; 
     reader.Close(); 
     } 
} 

И тогда я creaded файл XML:

<?xml version="1.0" encoding="utf-8"?> 
<XnaContent xmlns:ns="Microsoft.Xna.Framework"> 
    <Asset Type="Game.Item[]"> 
    <Item> 
    <itemType>Weapon</itemType> 
    <itemRarity>Rare</itemRarity> 
    <itemID>0001</itemID> 
    <positionID> 
     <X>1</X> 
     <Y>1</Y> 
    </positionID> 
    <name>The sword</name> 
    <description>Description</description> 
    </Item> 
    <Item> 
    <itemType>Equipment</itemType> 
    <itemRarity>Uncommon</itemRarity> 
    <itemID>0002</itemID> 
    <positionID> 
     <X>1</X> 
     <Y>1</Y> 
    </positionID> 
    <name>The Item</name> 
    <description>Description</description> 
    </Item> 
    <Item> 
    <itemType>Drone</itemType> 
    <itemRarity>Common</itemRarity> 
    <itemID>0003</itemID> 
    <positionID> 
     <X>1</X> 
     <Y>1</Y> 
    </positionID> 
    <name>The Drone</name> 
    <description>Description</description> 
    </Item> 
    </Asset> 
</XnaContent> 

Сейчас проблема заключается в том, что я получаю следующая ошибка:

error: Importer 'XmlImporter' had unexpected failure! 
Microsoft.Xna.Framework.Content.Pipeline.InvalidContentException: Could not resolve type 'Game.Item[]'. 

Я прочитал некоторые другие вопросы здесь, которые я должен был бы сделать ссылка, но я просто не могу найти способ сделать это. В проводнике решений я вижу ссылки, но когда я нажимаю кнопку «Добавить», я ничего не вижу в проектах, там есть только стандартные материалы, такие как «Рамки» и т. Д. О, и у меня есть constuctor без аргументов в классе Item, так что это должно быть хорошо.

Еще одна вещь. Я попытался написать список элементов в файл XML, и он отлично сработал.

Заранее благодарен!

+1

Возможно [этот учебник] (http://dylanwilson.net/creating-custom-content-importers-for-the-monogame-pipeline) поможет. Извините, у меня нет времени, чтобы написать правильный ответ. – craftworkgames

+0

@craftworkgames У меня есть кое-что сделанное, но я не знаю, как сделать кучу вещей. Что мне нужно в писателе вместо FileFileData и мне нужна обработка, если я просто хочу создавать объекты с помощью XML-файла? Я немного новичок в этом ... – bambucha

+0

Я не понимал, что вы подразумеваете под «» Еще одна вещь. Я попытался написать список элементов в XML-файл, и он отлично сработал. »« - что сработало правильно? можно ли десериализовать отдельные экземпляры вашего типа? –

ответ

0

Вам нужно добавить ссылку на скомпилированную библиотеку dll lib, что означает, что ваши типы должны быть определены во внешнем проекте.

Создайте еще один проект, который компилируется в DLL, определить все Структуры и классы там (по крайней мере те, которые нуждаются в сериализации), и добавить ссылку на DLL из контент-менеджера, выполнив следующие действия:

  1. открыт менеджер конвейера контента.
  2. выберите корневой узел («Содержимое»).
  3. На вкладке свойств нажмите «Ссылки».
  4. Нажмите «Добавить» и выберите путь к файлу dll, который вы создали из другого проекта.

Я недавно задал аналогичный вопрос в сообществе monogame и в настоящее время его невозможно сериализовать типы из вашего собственного проекта в/из xml без использования другого проекта, который строится в dll.

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