1

在这方面遇到了一些障碍,想知道我哪里出错了。

我们的服务器有两个类:Order 和 OrderDto。Order 类创建我们的领域对象,OrderDto 类创建我们的 DTO 对象。

DTO 类具有以下修改它的属性:

[Serializable]
[XmlRoot("Order"), SoapType("Order")]
public class OrderDto : IDto

XmlRoot/SoapType 属性的目的是使 OrderDto 以类 Order 的形式出现给最终用户。它目前没有这样做。这是我的 Web 服务的方法,它通过服务引用从另一个项目中调用:

[WebMethod(Description = "Creates a new order with project information.")]
public OrderDto CreateOrderByProject(string name, string description)
{
    OrderDto orderDto = OrderDto.Create(name, description);
    return orderDto;
}

[Test]
public void CreateOrderWithValidProjectSubcode()
{
    OrderDto orderDto = WorkflowServices.CreateOrderByProject(OrderName, OrderDescription);
}

如您所见,WorkflowServices.CreateOrderByProject 声明自己返回的是 OrderDto 类型的对象,而不是 Order 类型的对象。

如何修改此代码以使最终用户看到 Order 而不是 OrderDto?

编辑:似乎使用 XmlType(TypeName = "Order") 可能就足够了。打算继续玩。

4

2 回答 2

0

为您的域对象和 DTO 对象使用两个不同的命名空间。这样,您可以为对象使用相同的名称(例如:您的域和 DTO 对象都被命名为“Order”)。在您在域和 DTO 对象之间转换的层中,您使用名称空间来区分它们(例如:domain.Order 和 Dto.Order)。仅在 Web 服务 API 中公开 DTO 对象的命名空间。

于 2012-09-18T17:42:03.157 回答
0

解决方案是使用 XmlType(TypeName = "Order") 而不是 XmlRoot("Order") 标记类

于 2012-09-19T00:03:17.540 回答