【问题标题】:Linq To Sql objects and Serialization issueLinq To Sql 对象和序列化问题
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个Linq实体集......当你将dbml设置为单向时,这不是已经完成了吗?
    【解决方案2】:

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

    查看下面的链接

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

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多