带有 ServiceStack 和 Angular 的 C# - 使用枚举 类 而不是 dto.ts 中的枚举类型

C# with ServiceStack and Angular - Use enumeration classes instead of enum types in dto.ts

如何访问 ServiceStack 为 Angular 生成的 dto.ts 文件中自定义枚举的属性(例如 AddressChanges)-class?

带基数的枚举-class

public class MutationType : Enumeration
{
    public static MutationType AddressChanges = new MutationType(1, nameof(AddressChanges));
    public static MutationType SomethingElse = new MutationType(2, nameof(SomethingElse));
    ...

    public MutationType(int id, string name)
        : base(id, name)
    {
    }
}

使用 Service-Stack

自动生成 dto.ts
export class MutationType extends Enumeration
{
    // The static fields are missing..
    public constructor(init?: Partial<MutationType>) { super(init); (Object as any).assign(this, init); }
}

你不能,DTO(数据传输对象)不应该有任何逻辑或实现。只有 DTO 的数据结构(即模式)能够使用 ServiceStack's Native Types generation 功能进行转换。

所以你的 DTO Service Models 应该只包含无实现的数据结构,比如枚举:

public enum MutationType
{
    AddressChanges,
    SomethingElse,
}

或者,如果您更喜欢将枚举值作为整数发送,您可以使用 [Flags] 属性对其进行注释:

[Flags]
public enum MutationType
{
    AddressChanges = 1,
    SomethingElse = 2,
}

然后您需要将枚举中的值映射回您自定义的复杂枚举类型,但所有进出服务层的服务模型都应该只是 POCO DTO。