如何序列化/反序列化简单的类和XML之间 [英] How to serialize/deserialize simple classes to XML and back

查看:181
本文介绍了如何序列化/反序列化简单的类和XML之间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有时候我想模仿我的课的存储数据,而无需建立一个往返到数据库。例如,假设我有以下类:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆