0

I have a WCF RESTful service which takes JSON as POST/PUT input and I am trying to figure out if the deserialisation of the stream is possible so that it become case-insensitive. So far I have I have done following:

  1. Put a custom host in Global.Asax

  2. Replace the DataContractSerializerOperationBehaviour with my custom Behaviour

I am really not sure how to go about writing the CreateSerialiser to make it case-insensitive. Any help will be tremendously appreciated.

Here is the code in Global.asax:

protected void Application_Start(object sender, EventArgs e)
{
    //Other things

    RouteTable.Routes.Add(new ServiceRoute("", new MyCustomHostFactory(), typeof(MyService)));
}

public class MyCustomHostFactory : WebServiceHost2Factory //ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new MyServiceHost(serviceType, baseAddresses);
    }      
}

public class MyServiceHost : WebServiceHost2
{
    public MyServiceHost(Type serviceType, Uri[] baseAddresses)
        : base(serviceType, true, baseAddresses)
    {
        if (Description.Endpoints != null)
        {
            if (dataContractSerializerElement != null)
            {
                foreach (var dataContractSerializerOperationBehavior
                    in
                    Description.Endpoints.SelectMany(e =>
                        e.Contract.Operations).Select(op =>
                            op.Behaviors.Find<MyDataContractSerializerOperationBehaviour>() ??
                            new MyDataContractSerializerOperationBehaviour(op)))
                {
                    dataContractSerializerOperationBehavior.MaxItemsInObjectGraph =
                        dataContractSerializerElement.MaxItemsInObjectGraph;
                }
            }

        }
    }
}

class MyDataContractSerializerOperationBehaviour : DataContractSerializerOperationBehavior
{
    public MyDataContractSerializerOperationBehaviour(OperationDescription operation) 
        : base(operation)
    {
    }

    public MyDataContractSerializerOperationBehaviour(OperationDescription operation, DataContractFormatAttribute dataContractFormatAttribute) 
        : base(operation, dataContractFormatAttribute)
    {
    }

    //THIS IS WHERE I AM STUCK
}
Vinay Pandey
  • 1,129
  • 3
  • 16
  • 33

0 Answers0