WebApi - Desserializando e serializando nomes de propriedades alternativas

Estou tentando descobrir como posso especificar nomes de propriedades alternativos com o ASP.NET WebApi - e fazê-lo funcionar para desserialização + serialização e JSON + XML. Eu só descobri soluções parciais até agora.

Desejo expor os nomes das propriedades como minúsculas com sublinhados e (por exemplo) têm nomes internos diferentes:

Externo:

campo umcampo dois

Interno:

ItemOneItemDois

Para teste, aqui está uma ação do controlador POST que apenas retransmite o que recebe:

// POST api/values
public TestSerialization Post([FromBody]TestSerialization value)
{
    return value;
}

E uma entidade de teste:

public class TestSerialization
{
    [DataMember(Name = "field_one")] // Doesn't appear to change anything
    public string ItemOne { get; set; }

    [JsonProperty(PropertyName = "field_two")] // Only works for serialization in JSON mode
    public string ItemTwo { get; set; }
}

Até agora, eu encontrei:

[DataMember (Name = "x")] não afeta a serialização em nenhuma direção[JsonProperty (Name = "x")] funciona na serialização (o valor retornado) ao usar JSON. (É um atributo JSON.NET, o serializador padrão).

Para dados de teste, submeto 4 propriedades, para ver qual valor é desserializado e qual o nome da propriedade na desserialização

ItemOne = "Valor A"ItemTwo = "Valor B"campo um = "1 correto"campo dois = "2 corretos"

Como posso conseguir isso?

questionAnswers(2)

yourAnswerToTheQuestion