1

オブジェクトグラフをシリアル化しようとしています。エンティティセットである子エンティティをロードする必要があるまでは機能します。システムはそれをシリアル化することを許可しません...それは私にこのエラーを与えます:

タイプ'System.Data.Linq.EntitySet`1[NetDataContractSerializerTest.JobService]'はシリアル化できません。DataContractAttribute属性でマークを付け、シリアル化するすべてのメンバーをDataMemberAttribute属性でマークすることを検討してください。タイプがコレクションの場合は、CollectionDataContractAttributeでマークすることを検討してください。サポートされている他のタイプについては、Microsoft.NETFrameworkのドキュメントを参照してください。

これが私が使用しているコードです:

        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())

これはエラーをスローします。

何か案は?

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 に答える