Это происходит потому, что сериализатор на стороне клиента не содержит ассоциаций.Сервисы Wcf ria имеют другой способ обработки этого вида сценариев, но это включает использование DomainContext и стандартных методов Get / Insert / Update / Delete.Мой совет - изменить знак вашего метода сохранения на что-то вроде
[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 (контекстно-зависимый)
Надеюсь, это поможет,Marco