枚举数据合同

时间:2013-01-31 13:58:39

标签: c# .net wcf

我有一个dataContract。

ItemInfo SearchItemByGuid(ClientEnum client, string itemGuid);

其中ClientEnum是:

enum ClientEnum
{
Client1,
Client2,
}

我将通过webHttpBinding公开数据合同。 所以我必须使用WebGet。 某种......

[WebGet(UriTemplate = "items/{client}/{itemguid}"]
ItemInfo SearchItemByGuid(ClientEnum client, string itemGuid);

所以问题是,我如何以良好的方式处理枚举类型....?

思路:

  1. 再创建一个界面,但使用字符串而不是枚举...
  2. 实现IParameterInspector(将字符串解析为枚举)
  3. QueryStringConverter?
  4. 任何想法?

    更新

    我似乎找到了一个解决方案: 所以...

     public class ClientEnumQueryStringConverter : QueryStringConverter 
    {
        public override object ConvertStringToValue(string parameter, Type parameterType)
        {
    //here goes actual conversion
            return base.ConvertStringToValue(parameter, parameterType);
        }
    
        public override string ConvertValueToString(object parameter, Type parameterType)
        {
    //here goes actual conversion
            return base.ConvertValueToString(parameter, parameterType);
        }
    
        public override bool CanConvert(Type type)
        {
            if (type == typeof(ClientEnum))
                return true;           
    
            return base.CanConvert(type);
        }
    }
    

    最后......

     public class MyWebHttpBehavior : WebHttpBehavior    
    {
        WebMessageFormat defaultOutgoingResponseFormat;
        public MyWebHttpBehavior()
        {
            this.defaultOutgoingResponseFormat = WebMessageFormat.Json;
            HelpEnabled = true;
        }
    
        public override WebMessageFormat DefaultOutgoingResponseFormat
        {
            get
            {
                return this.defaultOutgoingResponseFormat;
            }
            set
            {
                this.defaultOutgoingResponseFormat = value;
            }
        }
    
        protected override QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription)
        {
            return new ClientEnumQueryStringConverter ();
        }
    }
    

0 个答案:

没有答案