我正在尝试测试我正在开发的库存系统,但我想使用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);
}
}
}
}我不知道我现在要做什么。我现在真的被困住了,不知道该怎么办。帮帮我:)?
发布于 2014-01-22 20:34:12
此示例代码向您展示了如何将库存列表序列化为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);
}发布于 2014-01-23 11:46:33
正如您在我之前的回答中所说的,这意味着您不想使用序列化/反序列化方法,而是使用“手动”方法。您可以使用XDocument和linq-to-xml query“手动”写入和读取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方面的知识,所以请仔细阅读代码。如果你希望我解释这个答案中的每一行代码,那就太麻烦了。祝好运
https://stackoverflow.com/questions/21281082
复制相似问题