将序列化的WCF模型转换回本机模型

时间:2013-06-01 00:04:31

标签: c# wcf serialization wcf-data-services

我有一个包含3个项目的解决方案:

  • 客户端
  • 模型
  • WCF服务

Models项目有POCO类,它们引用我的数据库表,如下所示:

[DataContract]
    [Table("users")]
    public class User
    {
        public User()
        {

        }

        [DataMember]
        [Key, Column("userid", TypeName = "int")]
        public Int32 UserId { get; set; }

        [DataMember]
        [Column("username", TypeName = "varchar")]
        public String UserName { get; set; }

WCF服务项目引用了模型,以便从以下方法返回模型:

public User ValidateUser(string organization, string userName, string password)
        {
            Model.Poco.User user = new Model.Poco.User();
            user.UserId = 1;
            user.BoardMember = true;
            user.Email = "test@yahoo.com";
            user.FirstTimeLogin = false;
            user.IsActive = true;
            user.Notes = "notes";
            user.Password = "xxxxxx";
            user.UserName = "user1";
            return user;
        }

现在,我的客户端有一个WCF服务的服务引用,调用它的代码如下所示:

private void button1_Click(object sender, EventArgs e)
        {
            WCFService.Service1Client client = new WCFService.Service1Client();
            var user = client.ValidateUser("test", "test", "test");
        }

它正常工作,如果我导航“user”变量它具有WCF服务的所有对象属性,但我想要做的是:

Model.Poco.User user = client.ValidateUser("test", "test", "test");

但是,如果我这样做我得到一个错误,它无法转换为:WCFService.User到Model.Poco.User。

有关如何将序列化对象转换为本机对象的任何线索。 请注意,我在客户端和WCF服务上使用相同的对象,因为我在两者上引用了<模型 项目。 *

提前感谢任何帮助!!

1 个答案:

答案 0 :(得分:1)

在客户端项目中生成服务引用时,请检查选项以重用引用的程序集中的类型。否则,该工具将基于WSDL生成新类,作为服务引用的一部分。