API da Web do ASP.NET e class

Eu tenho uma class marcada com [Serializable]. Quando eu o retorno da API da Web, os nomes dos campos são todos funky.

Normalmente, o JSON retornado é

[{"OrderId":797 ... 

O JSON retornou ao usar o [Serializable]

 [{"k__BackingField":797 ... 

Eu quero marcá-lo serializável para usar um BinaryFormatter para armazenamento em cache. Existe alguma outra maneira senão escrever um serializador personalizado ou fazer uma class dupla que não seja serializável e escrever código de macaco para “lançar” entre os dois?

Você só precisa deste one-liner para fazer com que o Json.NET ignore a semântica [Serializable] novamente:

 ((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true; 

Uma solução melhor para você pode ser livrar-se de [Serializable] completamente, parar de usar BinaryFormatter e usar um serializador diferente para fazer qualquer cache que você queira fazer, como o serializador Json.NET, por exemplo.