使用NetDataContractSerializer序列化枚举

本文关键字:枚举 序列化 NetDataContractSerializer 使用 | 更新日期: 2023-09-27 18:19:55

我有以下内容:

[Serializable]
public class SimulationException : Exception
{
    public SimulationExceptionStatusCode StatusCode { get; set; }
    public SimulationException()
    { }
    public SimulationException(string msg) : base(msg)
    { }
    protected SimulationException(SerializationInfo info, StreamingContext context)
        : base(info, context)
    { }
}
[Serializable]
public enum SimulationExceptionStatusCode
{
    SimulationInstanceNotExist,
    LocationNotExist,
    InvalidOperation,
    GeneralError
}

我正在使用以下内容在客户端服务器wcf中的故障和异常之间进行转换:将故障转换为异常

问题是,当我用将异常转换为故障时

// converting to error to falut message Fault
MessageFault messageFault = MessageFault.CreateFault(
                new FaultCode("Sender"),
                new FaultReason(error.Message),
                error,
                new NetDataContractSerializer());
fault = Message.CreateMessage(version, messageFault, null);

枚举没有被序列化,当我反序列化时,我会得到枚举的默认值。

我错过了什么?

使用NetDataContractSerializer序列化枚举

用EnumMemeber装饰它,就像一样

[DataContract(Name = "SimulationExceptionStatusCode")]
public enum SimulationExceptionStatusCode
{
    [EnumMember]
    SimulationInstanceNotExist,
    [EnumMember]
    LocationNotExist,
    [EnumMember]
    InvalidOperation,
    [EnumMember]
    GeneralError
}

我也遇到了同样的问题
我做了一个简单的解决方案,当发送枚举时,将其转换为int/string,发送int/string(在数据约定中-我在WCF中传递了它),然后在服务中,将int/string转换为您的枚举。

当强制转换回枚举时,使用

Enum.Parse(..)