В моей архитектуре решения я придерживаюсь следующего:
У меня проблема десериализации объекта. В процессе десериализации я получаю следующее исключение из моего клиентского приложения.
{"Невозможно десериализовать тело XML с корневым именем« Пользователь »и корневым пространством имен» http://schemas.datacontract.org/2004/07/ECMS.Business.Entities' (для операции «Вход в систему» и контракта («ISecurityService», «http://tempuri.org/')) с использованием DataContractSerializer. Убедитесь, что что тип, соответствующий XML, добавлен в коллекцию известных типов службы. "}
В проекте ECMS.Business.Entities у меня есть следующая сущность
[DataContract]
public class User : IIdentifiableEntity
{
[DataMember]
public int Id { get; set; }
public int EntityId
{
get => Id;
set => Id = value;
}
[DataMember]
public string UserName { get; set; }
[DataMember]
public string FullName { get; set; }
public string Password { get; set; }
[DataMember]
public int Role { get; set; }
public bool IsActive { get; set; }
public ICollection<UserSession> Sessions { get; set; }
public ICollection<Visit> Visits { get; set; }
}
Который мне нужно вернуть обратно на сторону клиента (проект ECMS.Client.Entities) в качестве следующего объекта
[DataContract]
public class User : ObjectBase
{
private int _id;
[DataMember]
public int Id
{
get => _id;
set
{
if (_id != value)
{
_id = value;
OnPropertyChanged();
}
}
}
private string _userName;
[DataMember]
public string UserName
{
get => _userName;
set
{
if (_userName != value)
{
_userName = value;
OnPropertyChanged();
}
}
}
private string _fullName;
[DataMember]
public string FullName
{
get => _fullName;
set
{
if (_fullName != value)
{
_fullName = value;
OnPropertyChanged();
}
}
}
private int _role;
[DataMember]
public int Role
{
get => _role;
set
{
if (_role != value)
{
_role = value;
OnPropertyChanged();
}
}
}
}
[DataContract]
public abstract class ObjectBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}