3
我使用.NET 4.5和Entity Framework 5.0。 我有3個使用Code-First方法創建的基本實體類。現在我試圖序列化它,但無法完成。如何EF5序列化與ICollection的<T>
這裏的類的基本知識:
基類
public class BaseEntity
{
[Key]
public int Id {get; set;}
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
派生類
public class ChildEntity : BaseEntity
{
public int ParentId { get; set; }
[ForeignKey("ParentId")]
public ParentEntity ParentEntity { get; set; }
public string Description { get; set; }
}
public class ParentEntity : BaseEntity
{
public virtual ICollection<ChildEntity> Rules { get; set; }
public RuleGroup()
{
this.Rules = new HashSet<ChildEntity>();
}
}
我的上下文類
public class MyDbContext : DbContext
{
public DbSet<ParentEntity> Parents { get; set; }
public DbSet<ChildEntity> Childs { get; set; }
public MyDbContext()
: base("MyDbContext")
{
}
}
我tryed用序列:
using (var context = new MyDbContext())
{
using (var writer = XmlWriter.Create(destinationFile))
{
var serializer = new XmlSerializer(typeof(List<Parents>));
serializer.Serialize(writer, context.Parents.ToList());
}
}
但它看起來像我不能序列ICollection<T>
。
改成了List<T>
,但仍然給我的問題。
我如何可以序列\反序列化從XML \類這種簡單的結構?它甚至有可能嗎?
Tryed它和它沒有工作給予了以下異常:'消息\t「是沒有預料到的類型System.Data.Entity.DynamicProxies.Parent_E76FB33E6995E673A0E176C3BF1491089D201114AF560D2CB455BDBBD74C633A使用XmlInclude或SoapInclude屬性來指定類型不知道靜態。「' – Gil 2013-05-14 13:34:45
@Gil該消息是確認您有EF代理類。您可能必須創建單獨的DTO類,這些類可以被序列化,並使用類似AutoMapper的方法將數據複製到另一個或另一個。 – qujck 2013-05-14 13:39:06
如果我添加'[XmlIgnore]'公共虛擬的ICollection的'頂部規則{獲得;組; }'在ParentEntity中,我可以對它進行序列化,但它認爲問題在'ICollection '內。有沒有包裝或一種方法來序列化內容而不創建DTO的? –
Gil
2013-05-14 13:58:50