1

これに少し引っ掛かりに遭遇し、私がどこでうまくいかないのか疑問に思います。

サーバーには、OrderとOrderDtoの2つのクラスがあります。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は、Order型ではなく、OrderDto型のオブジェクトを返すことを宣言しています。

エンドユーザーにOrderDtoではなくOrderが表示されるように、このコードをどのように変更できますか?

編集:XmlType(TypeName = "Order")を使用するだけで十分なようです。遊び続けるつもりです。

4

2 に答える 2

0

ドメイン オブジェクトと DTO オブジェクトに 2 つの異なる名前空間を使用します。そうすれば、オブジェクトに同じ名前を使用できます (例: ドメインと DTO オブジェクトは両方とも "Order" という名前です)。ドメインと DTO オブジェクトの間で変換するレイヤーでは、名前空間を使用してそれらを区別します (例: domain.Order と Dto.Order)。Web サービス API で DTO オブジェクトの名前空間のみを公開します。

于 2012-09-18T17:42:03.157 に答える
0

解決策は、XmlRoot("Order") の代わりに XmlType(TypeName = "Order") でクラスにタグを付けることです。

于 2012-09-19T00:03:17.540 に答える