【问题标题】:.NET Web Service hydrate custom class.NET Web 服务水合物自定义类
【发布时间】:2025-12-06 23:50:01
【问题描述】:

我正在使用一个外部 C# Web 服务方法,它返回一个简单的计算结果对象,如下所示:

[Serializable]
public class CalculationResult
{
    public string Name { get; set; }
    public string Unit { get; set; }
    public decimal? Value { get; set; }
}

当我在我的 ASP .NET 项目中添加对此服务的 Web 引用时,Visual Studio 可以生成一个匹配的类,以便我可以轻松地使用和使用它。

我正在使用 Castle Windsor,我可能想要插入其他获取计算结果对象的方法,因此我希望在我的解决方案中使用一个通用类 CalculationResult(或 ICalculationResult),我的所有对象都可以使用它,这将始终匹配从外部 Web 服务返回的对象 1:1。

我是否可以告诉我的 Web 服务客户端为特定类而不是生成的类添加水合物?我宁愿不手动操作:

foreach(var fromService in calcuationResultsFromService)
{
    ICalculationResult calculationResult = new CalculationResult()
    {
       Name = fromService.Name
    };
    yield return calculationResult;
}

编辑:我很高兴使用 Service Reference 类型而不是旧的 Web Reference

【问题讨论】:

    标签: c# web-services


    【解决方案1】:

    首先,你的网络服务——你为什么要生成这些类?使用常见的共享类型。

    http://www.codeproject.com/KB/WCF/WCFCollectionTypeSharing.aspx

    这在使用公共网络服务时显然不是一个选项,但是当你控制两端时……这有很多好处。

    其中完整的代码控制;)

    【讨论】:

    • 我不拥有我正在使用的 ASP .NET 2.0 Web 服务的代码。
    • 然后我强烈建议学习这些课程并在它们生成时“处理它们”。将它们视为 DTO(Dta 传输对象)并尽快将它们移动到您自己的对象中。结果基本上是您的“只读”文档。不要在那里添加方法。保持原样。
    【解决方案2】:

    您可以使用http://automapper.codeplex.com。通常用于将域对象简化为 DTO。

    【讨论】: