Web Api和WCF的相同实体

本文关键字:实体 WCF Api Web | 更新日期: 2023-09-27 17:55:07

我现在有使用WCF服务的实体。

类似

的示例
[DataContract]
    public class Student
    {
        [DataMember]
        public long Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public DateTime Dob { get; set; }
    }

所以现在所有的属性都暴露给WCF。我想为wep api服务使用相同的类,但不公开所有字段。

我知道需要使用[IgnoreDataMember]作为默认的XML序列化器来忽略它,但是它会影响当前的wcf服务。

有没有更好的方法来处理这个

Web Api和WCF的相同实体

您可以构建一个简单的助手类,它将包含塑造响应对象和控制返回给客户机的对象图所需的所有函数。使用工厂模式,这将有助于塑造和控制返回给客户端的响应,因此您可以为数据库中的某些域对象模型创建简化模型。见下文

创建视图模型

public class StudentViewModel
{
    public long Id { get; set; }     
    public string Name { get; set; }
}

和如下所示的Factory类

public class ModelFactory
{
    public StudentViewModel Create(model )
    {
        return new StudentViewModel
        {
           Id = model.Id;
           Name = model.Name;
        }
    }
}
在你的webAPI控制器中定义一个属性
    private ModelFactory _modelFactory;
    protected ModelFactory TheModelFactory
    {
        get
        {
            if (_modelFactory == null)
            {
                _modelFactory = new ModelFactory();
            }
            return _modelFactory;
        }
    }

之后,你可以从GET方法调用自定义对象

Public IHttpActionResult GetStudent(int id)
{
 Student model = new Student();
 //Fetch data from DB and assign it to model
 return Ok(TheModelFactory.Create(model));
}

希望对你有帮助。

注:-这是我遵循的方法