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
Vous devez vous connecter pour publier un commentaire.
Certains de vos constatations/conclusions sont erronées...vous pouvez essayer ce qui suit:
Cela devrait fonctionner pour les deux par défaut Xml & Json formateurs de l'api web et à la fois pour la sérialisation et la désérialisation.
Les éléments suivants doivent travailler pour Json formateur seulement et ce, pour les deux sérialisation & de la désérialisation.
qui ne devrait pas se passer...pouvez-vous partager votre demande brute ressemble?
Ah - j'ai été en utilisant le Facteur de créer la demande, et a été à l'aide de la "x-www-form-codé" onglet. L'aide de la main de type de données JSON dans la "brute" de l'onglet donne le résultat escompté. Je suis bête, mais je suis un peu confus quant à pourquoi une "API Rest outil de test' a la fantaisie de clé/valeur des outils d'édition comme les 2 premiers onglets (form-data & forme-urlendcoded), où des outils pour générer du JSON demande de manuel...
JsonProperty ne fonctionne pas avec l'action à partir de la question. Il est toujours ignoré. Veuillez expliquer pourquoi vous pensez que l'OP constatations/conclusions sont erronées.
OriginalL'auteur Kiran Challa
Vous pouvez forcer Asp.Net pour utiliser le JSON deserializer par le passage d'un JObject à votre action, même si elle est un peu ennuyeux d'avoir à le faire de cette façon.
Ensuite, vous pouvez travailler avec elle comme un JObject ou appelez
.ToObject<T>();
qui sera alors l'honneur de laJsonProperty
attribut.Ne fonctionne pas pour moi. le contenu est toujours 'null'. Il fonctionne avec ([FromBody]TestSerialization valeur), mais alors JsonProperty est ignoré.
OriginalL'auteur Ben Wilde