2014-01-22 105 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

本示例代码展示了如何将清单序列化到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做到这一点。您可以使用XDocument和linq-to-xml查询“手动”编写和读取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的东西,所以仔细阅读代码。如果你希望我解释这个答案中的每一行代码,那么写太多了。好运