Это потому, что вы не сериализуете List
во время сериализации list
.Таким образом, во время десериализации он не будет вызывать установщик списка, поэтому не будет подписываться на событие.В вашем случае вы можете просто пометить List
с DataMemberAttribute
вместо list
, например:
[DataContract]
public class MyContract
{
private ObservableCollection<string> list;
internal MyContract()
{
List = new ObservableCollection<string>();
}
[DataMember]
public ObservableCollection<string> List
{
get
{
return list;
}
private set
{
list = value;
list.CollectionChanged +=
(s, e) =>
Console.WriteLine("It is never happens!! Why? - Are you sure?!");
}
}
}
Использование:
var obj = new MyContract();
var serializer = new DataContractSerializer(typeof(MyContract));
using (var ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
var result = serializer.ReadObject(ms) as MyContract;
result.List.Add("a");
}
В этом случае событие сработает.