具有多层数据结构的DataContractSerializer

时间:2015-04-27 17:41:16

标签: c# entity-framework entity-framework-6

我正在尝试实现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);
    }

那么,我是否需要对规则做一些事情以确保整个结构被编写,或Include()知道隧道深入到结构中并加载每个元素?

1 个答案:

答案 0 :(得分:1)

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

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