![](/img/trans.png)
[英]Protobuf-net: serializing a custom class containing a Dictionary<object, object>
[英]Serializing a class containing a custom class
我想将一个对象序列化为包含其他自定义类的xml。 据我了解(我一直在阅读MSDN和SO), XmlSerializer
并未考虑到这一点。
这是让我感到困惑的行:
XML序列化仅将对象的公共字段和属性值序列化为XML流。 XML序列化不包含类型信息。 例如,如果库名称空间中存在Book对象,则不能保证将其反序列化为相同类型的对象。
来自MSDN, 在这里
例如,我要序列化一个Order
类型的对象,但是它包含一个Products
列表,并且每个对象都包含一个Category
类型的对象:
class Order
{
List<Product> products;
}
class Product
{
Category type;
}
class Category
{
string name;
string description;
}
我希望我的Order
对象像这样被序列化:
<Order>
<Product>
<Category Name="">
<Description></Description>
</Category>
</Product>
<Product>
<Category Name="">
<Description></Description>
</Category>
</Product>
<Order>
XmlSerializer
已经做到了吗? 如果不是,是否还有另一个我必须定义自己的序列化过程的类?
订单可以视为产品列表,产品可以视为类别列表(因为它可以属于多个类别)。
您可以尝试使用
//...
using System.Xml;
using System.Xml.Serialization;
//...
[XmlRoot("Order")]
public class Order
{
[XmlArrayItem(ElementName = "Product", Type = typeof(Product))]
public List<Product> Products;
}
public class Product
{
[XmlArrayItem(ElementName = "Category", Type = typeof(Category))]
public List<Category> Categories;
}
public class Category
{
[XmlAttribute("Name")]
public string name;
[XmlElement("Description")]
public string description;
}
唯一的权衡是, <Products>
和<Categories>
(多个)标记将可见,因为变量是以这种方式命名的,但是从随后解析XML的角度来看,这不是问题。 如果您不想在XML中显示任何其他字段,则可以在它们前面[XmlIgnore()]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.