1

我正在尝试序列化对象图。它一直有效,直到我必须加载一个作为实体集的子实体。系统不允许它序列化......它给了我这个错误:

无法序列化类型“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)

回到我得到错误。

我个人认为它希望我将 ToList() 添加到 JobServices,不幸的是我做不到

dataloadOptions.LoadWith(j => j.JobServices.ToList())

这会引发错误。

有任何想法吗?

4

2 回答 2

0

错误消息非常有用:JobService 类未标记为序列化为数据协定。

您需要用属性装饰它DataContractAttribute,并用属性装饰成员DataMember

[DataContract]
public class JobService
{
     [DataMember]
     public string SomeProperty { get; set;}

}
于 2012-09-10T20:40:04.360 回答
0

好吧好吧……看看我发现了什么……这似乎可以很好地序列化和反序列化我的东西。这家伙没有使用 NetDataContractSerializer.Serialize(),而是编写了使用 DataContractSerializer、XMLWriter 和 XMLReader 的序列化和反序列化函数

检查下面的链接

http://www.codeproject.com/Tips/47054/How-to-serialize-list-of-linq-entities-ex-from-DBM

于 2012-09-10T21:11:29.213 回答