具有多层数据结构的 DataContractSerializer

DataContractSerializer with Multi-tiered data structures

我正在尝试实现一个 DataContractSerializer 来生成一个 XML 文件来表示我们有点复杂的对象模型。根对象有多个 ICollection 属性,其中一个属性有多个 ICollection 属性,多个属性有多个 ICollection 属性……你懂的。

我用 [DataContract(Name = "foo")] 标签装饰了我所有相关的 类,阅读了 this 关于使用 Include() 的问题,并开始构思它。当我把顶层放在一起时,我想知道第二层是否也需要显式声明。这是我目前所拥有的:

    public void Serialize(string DataCode)
    {
        Product prod = context.Products
            .Include(p => p.Products)
            .Include(p => p.References)
            .Include(p => p.Dates)
            .Include(p => p.Weights)
            .Include(p => p.Notes)
            .Include(p => p.Rules)  // Rules have PriceConditions, which have Prices...
            .Include(p => p.DataBooks)
            .First(m => m.ProductCode == DataCode);
        FileStream fs = new FileStream(path,FileMode.Create);
        XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
        DataContractSerializer serializer =  new DataContractSerializer(typeof(Product));
        serializer.WriteObject(writer, prod);
    }

那么,我是否需要对 Rules 做些什么以确保整个结构都被写入,或者 Include() 是否知道深入挖掘结构并加载每个元素?

您还需要明确包括较低级别。

Product prod = context.Products
    .Include(p => p.Rules.Select(r => r.PriceConditions.Select(p => p.Prices)));