场景如下:我实现了一个WCF服务(让我们称之为X),它有自己的数据对象。 服务X正在使用另一个WCF服务(Y),它具有自己的一组数据对象。服务X需要将从服务Y接收的一些数据传递给其客户端(服务X客户端)。 据我所知,将从Y服务接收的对象转换为X服务的数据对象被认为是“最佳实践”。
Enum值的最佳做法是什么?我需要映射每个枚举值还是有另一种方式?
答案 0 :(得分:0)
通常,我们的想法是将您的服务用户与实施中的更改隔离开来。因此,您不会在线路上公开您的实现类型。想象您决定重命名枚举值的情况。如果服务使用者没有更新他们的实现,您将引入一个重大更改,因为服务用户将向您发送旧的枚举值,而不会正确反序列化。
此外,您可能会发现并非所有枚举值都适用于您的服务用户(可能是在内部使用)
所以,是的,您应该像其他类型一样翻译枚举值
如果您为枚举提供明确的数值,则可以使用强制转换
在它们之间进行转换class Program
{
static void Main(string[] args)
{
Internal i = Internal.Too;
External e = (External) i;
Console.WriteLine(e);
}
}
enum Internal
{
One = 1,
Too = 2
}
[DataContract]
enum External
{
[EnumMember]
One = 1,
[EnumMember]
Two = 2
}
但是,你必须要小心他们没有失去同步