これは、クライアント側のシリアライザーに関連付けが含まれていないために発生します。Wcf ria サービスには、この種のシナリオを処理する別の方法がありますが、これには DomainContext と標準の Get/Insert/Update/Delete メソッドの使用が含まれます。私のアドバイスは、save メソッドの符号を次のように変更することです。
[Invoke]
public void SaveOrderChanges(string serializedOrder)
{
Order order = MyCustomSerializer.Deserialize<Order>(serializedOrder);
_dataManager.SaveOrderChanges(order);
}
これは、オブジェクトをシリアル化および逆シリアル化するために使用するユーティリティ クラスですが、Items コレクションを含めるようにだます必要があります。
public static class Serialization
{
public static string Serialize<T>(T obj)
{
//Create a stream to serialize the object to.
var ms = new MemoryStream();
// Serializer the User object to the stream.
var ser = new DataContractSerializer(typeof (T));
ser.WriteObject(ms, obj);
byte[] array = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(array, 0, array.Length);
}
public static T Deserialize<T>(string obj) where T : class
{
if (obj == null)
return null;
var serializer = new DataContractSerializer(typeof (T));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj));
var result = serializer.ReadObject(stream) as T;
return result;
}
}
もちろん、逆のクライアント側を実行して、注文とアイテムをシリアル化する必要があります。これは私が知っている最も簡単な方法ですが、こちらもご覧ください。最終的には、WCF Ria が意図する方法でコードをリファクタリングしてみてください (コンテキスト ベース)。
これが役に立てば幸いです、
マルコ