繁体   English   中英

序列化包含自定义类的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM