var store = GetStore(); (DataStorageFileStream fileStream = store.OpenFile(RootData,FileMode.Create)) 使用 serializer.WriteObject(fileStream,rootdatalist); }使用子項目序列化對象c#
但是,這只是序列化rootdatalist,而不是子項目。 rootdatalist有一個節點列表屬性,我如何序列化,以便我得到列表層次序列化?
,因爲它是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]
標籤在我的屬性上方或沒有g將被加載。 編輯:: 要別人想序列化的dbml類http://blogs.msdn.com/b/wriju/archive/2007/11/27/linq-to-sql-enabling-dbml-file-for-wcf.aspx
是否有任何[DataMember]信息在'Nodes'上方?這裏的「Root」是什麼?它暴露了一個「表」的事實使我認爲它是一個'DataContext',但'DataContext'不是(AFAIK)旨在成爲可序列化模型的一部分 - 它比域對象更像是管理器。 (從單向dbml生成類型的常規關係是'EntitySet ',而不是'表') –
2010-06-20 19:54:47
它確實是datacontext的一部分,但我認爲當我添加單向序列化時,該對象是可序列化的我的帖子的底部鏈接。不幸的是,這似乎不太合適。我不太清楚我在做什麼錯誤 – Jakob 2010-06-20 20:26:19
@Jakob - 完全; * data-context *不是可串行化的。它只是你的*域實體*成爲可序列化的。然而;你在這裏的目標是什麼?我可能有更多的技巧在我的袖子裏......(我虛心地說,我*痛苦地*熟悉.NET序列化的多種僞裝) – 2010-06-20 20:29:54