Я пытаюсь реализовать DataContractSerializer
для создания XML-файла, представляющего нашу довольно сложную объектную модель. Корневой объект имеет несколько свойств ICollection
, один из которых имеет несколько свойств ICollection
, кратные из которых имеют несколько свойств ICollection
... у вас есть идея.DataContractSerializer с многоуровневыми структурами данных
Я украсил все соответствующие классы [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()
знать туннель глубоко в структуру и загрузить каждый элемент?
Что делать, если вы не знаете, сколько уровней вниз структура идет? –
Я пробовал оглядываться, но, похоже, вам нужно было бы явно указать 'Include()' каждое свойство в какой-то момент. Например, см. Http://stackoverflow.com/questions/14512285/entity-framework-is-there-a-way-to-automatically-eager-load-child-entities-wit. Возможно, вы могли бы задать еще один вопрос о том, как охотно загружать всех детей в определенные моменты. – jjj