C# Web 服务 将类转换为自身
本文关键字:转换 Web 服务 | 更新日期: 2023-09-27 18:33:30
我在网络服务方面遇到了问题。我通常的开发方法是创建如下所示的类。
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
}
}
当允许应用程序/网站直接访问数据库时,这对我来说效果很好。我现在需要通过网络服务公开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
(当然这不是最好的解决方案(,或者我将如何创建转换方法,因为我的应用程序和我的 Web 服务都使用相同的 DLL, 它只是引入了需要转换的 Web 服务。或者如果我错误地实施了正确的想法,或者错过了一些东西。或者以上都不是...
我已经考虑过让我的 Web 服务只返回 XML 并在我的应用程序中序列化结果,但这似乎是一种冗长的方法,必须有更好的解决方案。任何建议将不胜感激。
在处理 Web 服务时,我们采取了不尝试让 .net 执行自定义对象的常规序列化/反序列化的方法。
相反,我们使用 JSON 传递所有内容。 有一些标准工具可以使序列化/反序列化过程非常顺利。 如 http://json2csharp.com/和 http://json.codeplex.com/
有几个原因。 首先是通过使用诸如JSON之类的标准,那么几乎所有的东西都可以使用它。 其次,XML是混乱的...非常凌乱。 做对也很难,做错也很容易。 第三,我们更容易控制确切的输出。
最后,关于传递 JSON 对象的一个有趣说明是,您可以在提供程序中向其添加新字段,并在以后更改使用者。 这是非常宽容的。
您应该开始使用 WCF。
在 WCF 中,可以使用数据协定公开所需的数据。
所有序列化和反序列化都是自动发生的,您可以在客户端和服务器上获得相同的类型,而无需额外的工作。