有时,我想模拟类的已存储数据,而无需设置往返数据库的访问。例如,假设我有以下类(class):

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; }
}

假设我在内存中构建了一个ShoppingCart对象,并希望将其“保存”为XML文档。是否可以通过某种XDocument.CreateFromPOCO(shoppingCart)方法实现?从另一个方向来看又如何:是否有内置的方法可以从像ShoppingCart这样的XML文档创建new ShoppingCart(xDoc)对象?

最佳答案

XmlSerializer是一种实现方法。 DataContractSerializer是另一个。 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类中的字段。

10-08 11:55