C#webservice将类转换为自身

时间:2012-05-08 22:18:31

标签: c# .net web-services

我遇到了webservices的问题。我通常的开发方法是创建如下所示的类。

namespace Project.Entities
{
    public class Entity
    {
        //Some Members        
    }
}
namespace Project.Service
{
    public class EntityService
    {
        public Project.Entities.Entity Get(int EntityID); 
        // More Methods to retrive Entities
    }
}

当允许应用程序/网站直接访问数据库时,这对我来说很好。我现在需要通过web服务公开Project.Service方法,例如

namespace Project.API
{
    public class EntitiyWebService
    {
        [WebMethod()]
        public Project.Entities.Entity Get(int EntityID)
        {
            return new Project.Service.EntityService(EntityID);
        }
    }
}

我的问题是,如果我从另一个应用程序(使用Project.Entities)调用我的web服务,我无法将Project.Entities.Entity转换为Project.API.EntityWebService.Entity。我想我明白为什么这不能编译,因为就编译器而言,这两个类没有任何共同之处,只有它们的名字。

我真正需要知道的是,如果我因为不良做法而遇到这个问题,如果我需要尽快开始重新设计,或者我不应该担心它而只是将我的引用从Entities.Entity更改为在我的应用中API.EntityWebService.Entity(当然这不是最佳解决方案),或者我将如何创建转换方法,因为我的应用和我的网络服务都使用相同的DLL,它只是引入了web服务转换是必需的。或者如果我错误地实施了正确的想法,或者错过了某些东西。或者以上都不是......

我已经考虑过让我的网络服务只返回XML并在我的应用程序中序列化结果,但这似乎是一个漫长的方法,必须有一个更好的解决方案。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:5)

在处理Web服务时,我们采取的方法是不让.net对自定义对象进行常规序列化/反序列化。

相反,我们使用JSON传递所有内容。有一些标准工具可以使序列化/反序列化过程非常顺利。例如http://json2csharp.com/http://json.codeplex.com/

有几个原因。第一个是通过使用诸如JSON之类的标准,那么几乎所有东西都可以使用它。其次,XML很乱......非常混乱。这样做也很难,而且很容易做错。第三,我们可以更轻松地控制确切的输出。

最后,关于传递JSON对象的一个​​有趣的注意事项是,您可以在提供程序中向其添加新字段,并在以后更改您的使用者。这是非常宽容的。

答案 1 :(得分:2)

你开始使用WCF。

在WCF中,您可以使用DataContracts公开所需的数据。

所有序列化和反序列化都会自动发生,您可以在客户端和服务器上获得相同的类型,而无需额外的工作。