如何序列化/反序列化简单的类和XML之间 [英] How to serialize/deserialize simple classes to XML and back
问题描述
有时候我想模仿我的课的存储数据,而无需建立一个往返到数据库。例如,假设我有以下类:
Sometimes I want to emulate stored data of my classes without setting up a round trip to the database. For example, let's say I have the following classes:
public class ShoppingCart
{
public List<CartItem> Items {get; set;}
public int UserID { get; set; }
}
public class CartItem
{
public int SkuID { get; set; }
public int Quantity { get; set; }
public double ExtendedCost { get; set; }
}
比方说,我建立内存中的的购物
对象,并希望拯救它作为一个XML文档。通过某种 XDocument.CreateFromPOCO(购物车)
法这可能吗?如何在另一个方向:是有一个内置的方式来创建像新的购物车(XDOC)的XML文档
?的购物
对象
Let's say I build a ShoppingCart
object in memory and want to "save" it as an XML document. Is this possible via some kind of XDocument.CreateFromPOCO(shoppingCart)
method? How about in the other direction: is there a built-in way to create a ShoppingCart
object from an XML document like new ShoppingCart(xDoc)
?
推荐答案
的 XmlSerializer的是做到这一点的方法之一。 <一href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx"相对=nofollow> DataContractSerializer的是另一回事。例如用的XmlSerializer
:
XmlSerializer is one way to do it. DataContractSerializer is another. Example with XmlSerializer
:
using System.Xml;
using System.Xml.Serialization;
//...
ShoppingCart shoppingCart = FetchShoppingCartFromSomewhere();
var serializer = new XmlSerializer(shoppingCart.GetType());
using (var writer = XmlWriter.Create("shoppingcart.xml"))
{
serializer.Serialize(writer, shoppingCart);
}
和反序列化回:
var serializer = new XmlSerializer(typeof(ShoppingCart));
using (var reader = XmlReader.Create("shoppingcart.xml"))
{
var shoppingCart = (ShoppingCart)serializer.Deserialize(reader);
}
也为更好的封装我会用你的 CartItem
类字段属性,而不是推荐你。
Also for better encapsulation I would recommend you using properties instead of fields in your CartItem
class.
这篇关于如何序列化/反序列化简单的类和XML之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!