2014-01-22 4 views
0

Я пытаюсь проверить систему инвентаризации, которую я создаю, но я хочу сделать это с помощью XML. положить в кодексах и такие, как:Система инвентаризации XML

<Item> 
    <ItemName ItemName = "Apple"> 
    <ItemQuantity>1</ItemQuantity> 
    <ItemMaxQuantity>64</ItemMaxQuantity> 
    <ItemState>PERFECT</ItemState> 
    </ItemName> 

    <ItemName ItemName = "Sword"> 
    <ItemQuantity>1</ItemQuantity> 
    <ItemMaxQuantity>1</ItemMaxQuantity> 
    <ItemState>BROKEN</ItemState> 
    </ItemName> 
</Item> 

Я знаю, как сериализовать и тому подобное. Но не знаю, как добавить их в игру, имея несколько предметов, как я показал. У меня есть класс инвентаря. Вот так:

namespace inventory_test 
{ 
    class Inventory 
    { 
     public enum ItemState 
     { 
      NONE, 
      PERFECT, 
      FINE, 
      BROKEN, 
      DESTROYED 
     }; 

     /*public enum ItemType 
     { 
      FOOD, 
      USEABLE, 
      WEAPON, 
      KEY, 
      TOOL 
     }; Implement this in the test later*/ 

     [XmlElement("ItemName")] 
     public string ItemName 
     { get; set; } 

     [XmlElement("ItemState")] 
     public string ItemState 
     { get; set; } 

     [XmlElement("ItemQuantity")] 
     public string Quantity 
     { get; set; } 

     [XmlElement("ItemMaxQuantity")] 
     public string MaxQuantity 
     { get; set; } 

     static void AddItem(int itemID, string itemState, int quantity, int maxquantity) 
     { 

     } 


    } 
} 

Это мой Program.cs:

namespace inventory_test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     } 
//Serialization 
     static public void Serialize(Inventory inventory) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(Inventory)); 
      using (TextWriter writer = new StreamWriter(@"C:\Xml.xml")) 
      { 
       serializer.Serialize(writer, inventory); 
      } 
     } 
    } 
} 

Я понятия не имею, что я должен делать. Я действительно застрял прямо сейчас и не знаю, что делать. Помогите мне :)?

+0

есть вопросы? Вы хотите десериализовать содержимое xml в список объекта «Inventory»? – har07

+0

Вот что я хочу делать, да. С атрибутами. – Stepepper

ответ

1

В этом примере кода показано, как сериализовать List of Inventory в xml-файл и как читать файл и генерировать тот же список инвентаря.

var serializer = new XmlSerializer(typeof(List<Inventory>)); 
var inventories = new List<Inventory>(); 
inventories.Add(new Inventory 
{ 
    ItemName = "Apple", 
    Quantity = "1", 
    MaxQuantity = "64", 
    ItemState = "PERFECT" 
}); 
inventories.Add(new Inventory 
{ 
    ItemName = "Sword", 
    Quantity = "1", 
    MaxQuantity = "1", 
    ItemState = "BROKEN" 
}); 
//write to xml file 
using (var writer = new StreamWriter("inventory.xml")) 
{ 
    serializer.Serialize(writer, inventories); 
} 
//read from xml file and generate List<Inventory> 
using (var reader = new StreamReader("inventory.xml")) 
{ 
    //variable 'result' will contain the same value as 'inventories' 
    var result = (List<Inventory>)serializer.Deserialize(reader); 
} 
+0

Это не совсем то, что я хочу, но хочу написать имя, описание, состояние элемента в XML, а затем передать его самому коду :) – Stepepper

0

В соответствии с Вашим комментарием в моем предыдущем ответе, означало, что вы не хотите делать это с сериализации десериализации подход/а «ручной» подход isntead. Вы можете писать и читать xml-файл «вручную», используя XDocument и запрос linq-to-xml. Это пример:

//writing to xml file 
var doc = new XDocument(new XDeclaration("1.0", "utf-8", "no")); 
var root = new XElement("Item"); 
doc.Add(root); 
foreach (var inventory in inventories) 
{ 
    var itemNode = new XElement("ItemName"); 
    var itemAttribute = new XAttribute("ItemName", inventory.ItemName); 
    itemNode.Add(itemAttribute); 
    var itemQty = new XElement("ItemQuantity", inventory.Quantity); 
    itemNode.Add(itemQty); 
    var itemMaxQty = new XElement("ItemMaxQuantity", inventory.MaxQuantity); 
    itemNode.Add(itemMaxQty); 
    var itemState = new XElement("ItemState", inventory.ItemState); 
    itemNode.Add(itemState); 
    root.Add(itemNode); 
} 
doc.Save("Inventory.xml"); 

//reading from xml file created by above codes to create List<Inventory> object 
var docFromFile = XDocument.Load("Inventory.xml"); 
var inventoriesFromFile = (from inventory in docFromFile.Descendants("ItemName") 
         select new Inventory 
            { 
             ItemName = inventory.Attribute("ItemName").Value, 
             Quantity = inventory.Element("ItemQuantity").Value, 
             MaxQuantity = inventory.Element("ItemMaxQuantity").Value, 
             ItemState = inventory.Element("ItemState").Value 
            }).ToList(); 

//in the end you'll get variable inventories and inventoriesFromFile have same value 

Обратите внимание, что inventories переменной в коде выше такая же, как и в предыдущем ответе (определение и контент/значение). Также в вопросе вы только показали некоторые знания/усилие на XmlSerializer не на XDocument материалах, поэтому внимательно прочитайте коды. Будет слишком много, чтобы написать, если вы ожидаете, что я объясню каждую строку кода в этом ответе. Удачи

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