var store = GetStore(); с использованием (IsolatedStorageFileStream fileStream = store.OpenFile (RootData, FileMode.Create)) { DataContractSerializer serializer = новый DataContractSerializer (typeof (List)); serializer.WriteObject (fileStream, rootdatalist); }сериализовать объект с подпунктами C#
Но это только сериализует rootdatalist, а не подэлементы. У rootdatalist есть свойство List List, как это сделать сериализуем, чтобы получить иерархию списка?
Поскольку это DBML сгенерированных объекты Узлов свойство корня
public System.Data.Linq.Table<Node> Nodes
{
get
{
return this.GetTable<Node>();
}
}
Моего DataContext возвращение:
public List<Root> GetRootList(Guid userid)
{
DataLoadOptions loadopts = new DataLoadOptions();
loadopts.LoadWith<Root>(s => s.Nodes);
this.DataContext.LoadOptions = loadopts;
return this.DataContext.Root.Where(s => s.Nodes.Count(n => n.UserId == userid) > 0).ToList();
}
узел EntitySet выглядит следующим образом в моем DBML дизайнере
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Root_Node", Storage="_Nodes", ThisKey="Id", OtherKey="RootId")]
[global::System.Runtime.Serialization.DataMemberAttribute(Order=5, EmitDefaultValue=false)]
public EntitySet<Node> Nodes
{
get
{
if ((this.serializing && (this._Nodes.HasLoadedOrAssignedValues == false)))
{
return null;
}
return this._Nodes;
}
set
{
this._Nodes.Assign(value);
}
}
Также у меня должен быть тег [Include]
выше моих свойств или nothi ng будет загружен. Edit :: Для других желающих сериализации DBML классы http://blogs.msdn.com/b/wriju/archive/2007/11/27/linq-to-sql-enabling-dbml-file-for-wcf.aspx
Есть ли данные [DataMember] над 'Nodes'? А что такое «Корень» здесь? Тот факт, что он предоставляет «Таблица», заставляет меня думать, что это «DataContext», но «DataContext» не является (AFAIK), который должен быть частью сериализуемой модели - это скорее менеджер, чем объект домена. (регулярная связь от однонаправленного типа, созданного dbml, будет 'EntitySet ', а не 'Таблица ') –
Это определенно часть файла данных, но я подумал, что объект будет сериализуемым, когда я добавлю однонаправленную сериализацию в соответствии с нижняя ссылка моего сообщения. К сожалению, это не совсем так. Я не совсем понимаю, что я делаю неправильно – Jakob
@Jakob - точно; * data-context * не предназначен для сериализации. Только ваши объекты * домена * становятся сериализуемыми. Однако; Какова ваша цель здесь? У меня может быть больше нескольких трюков в рукаве ... (я смиренно заявляю, что я * болезненно * знаком с сериализацией .NET в нескольких обличьях) –