【发布时间】:2012-09-03 17:56:57
【问题描述】:
我正在尝试序列化一个对象图。它一直有效,直到我必须加载一个作为实体集的子实体。系统不允许它序列化......它给了我这个错误:
无法序列化类型“System.Data.Linq.EntitySet`1[NetDataContractSerializerTest.JobService]”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。
这是我正在使用的代码:
DataClasses1DataContext dataAccessContext = new DataClasses1DataContext();
MemoryStream stream = new MemoryStream();
DataLoadOptions dataloadOptions = new DataLoadOptions();
dataloadOptions.LoadWith<JN>(j => j.nh);
dataloadOptions.LoadWith<JN>(j => j.JobServices);// this is the child entity set
dataAccessContext.LoadOptions = dataloadOptions;
var jn= dataAccessContext.JN.Where(j => j.LocnID.Trim() == "HT").ToList();
var netDataContractSerializer = new NetDataContractSerializer();
netDataContractSerializer.Serialize(stream, jn); //the error happens here
如果我删除了
dataloadOptions.LoadWith(j => j.JobServices)
数据将与完整的 JN 和 nh 表一起序列化。但是当我把
dataloadOptions.LoadWith(j => j.JobServices)
回到我得到错误。
我个人认为它想让我在 JobServices 中添加一个 ToList(),不幸的是我做不到
dataloadOptions.LoadWith(j => j.JobServices.ToList())
这会引发错误。
有什么想法吗?
【问题讨论】:
标签: c# .net linq-to-sql serialization netdatacontractserializer