Если вы не обязательно используете DataContractSerializer, вы можете рассмотреть возможность использования XmlSerializer для сериализации ваших данных, ему не нужно использовать атрибуты DataContract и DataMember.
namespace ServiceInterface.Models
{
public class MyData
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class MyDataFather
{
public MyData MyData { get; set; }
}
}
Мой сервисный контракт и сервис.Пожалуйста, не забудьте добавить атрибут XmlSerializerFormat к контракту на обслуживание, он говорит wcf использовать XmlSerializer
[ServiceContract]
[XmlSerializerFormat]
public interface ICotractWithoutAttribute
{
[OperationContract]
MyDataFather GetData(MyDataFather myDataFather);
}
public class CotractWithoutAttribute : ICotractWithoutAttribute
{
public MyDataFather GetData(MyDataFather myDataFather)
{
return myDataFather;
}
}
Результат.
Мой клиент.
using (ChannelFactory<ICotractWithoutAttribute> factory = new ChannelFactory<ICotractWithoutAttribute>("without"))
{
ICotractWithoutAttribute cotractWithoutAttribute = factory.CreateChannel();
ServiceInterface.Models.MyDataFather myDataFather = cotractWithoutAttribute.GetData(new ServiceInterface.Models.MyDataFather { MyData = new ServiceInterface.Models.MyData { Name = "MICK", Age = 18, Id = 1 } });
}
Для получения дополнительной информации о XmlSerializer вы можете обратиться к https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-the-xmlserializer-class
Если вы должны использовать DataContractSerializer, я думаю, вы должны определить класс с аналогичной структуройс внешним классом добавьте DataContarct и DataMember в класс и скопируйте данные своего внешнего класса в свой собственный класс в вашей службе.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/51b9d122-7345-44c7-8cd8-eb0ccdbffabf/can-i-use-external-assembly-class-in-a-wcf-without-using-poco?forum=wcf