WebApi - Désérialisation et la sérialisation d'alterner les noms de propriété

J'essaie de comprendre comment je peut spécifier d'autres noms de propriété avec ASP.NET WebApi - et de le faire travailler pour la désérialisation + sérialisation, et pour JSON + XML. Je ne l'ai découvert que des solutions partielles jusqu'à présent.

Je veux exposer les noms de propriété comme des minuscules avec des traits de soulignement, et (par exemple du souci) ont différents noms internes:

Externe:

  • champ-un
  • champ-deux

Interne:

  • ItemOne
  • ItemTwo

Pour les tests, voici un POSTE de contrôleur de l'action qui vient de relais de ce qu'il reçoit:

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

Et un test de l'entité:

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; }
}

Jusqu'à présent, j'ai trouvé:

  • [DataMember(Name = "x")] n'a aucun effet sur la sérialisation dans les deux sens
  • [JsonProperty(Name = "x")] travaille sur la sérialisation (le retour de la valeur) lors de l'utilisation de JSON. (C'est un JSON.NET attribut, la valeur par défaut sérialiseur).

Des données de test, je vous propose 4 propriétés, pour voir qui obtient la valeur désérialisée, et que le nom de la propriété est sur la désérialisation

  • ItemOne = "Valeur"
  • ItemTwo = "Valeur De B"
  • champ-one = "1 Correct"
  • champ-deux = "Correct 2"

Comment puis-je y parvenir?

OriginalL'auteur Overflew | 2014-03-18