使用NetDataContractSerializer序列化枚举

时间:2013-06-26 14:45:48

标签: c# wcf serialization enums netdatacontractserializer

我有以下内容:

[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 Fault to exceptions

问题在于,当我将异常转换为错误时:

// 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);

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

我错过了什么?

2 个答案:

答案 0 :(得分:0)

用EnumMemeber装饰它

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

答案 1 :(得分:0)

我遇到了同样的问题 我做了一个简单的解决方案,可能对你有好处,当发送枚举,强制转换为int / string,发送int / string(在数据契约中 - 我在WCF中传递它),然后在服务上,强制转换int / string到你的枚举。

当转回枚举时,请使用

Enum.Parse(..)