WebApi - Deserialisieren und serialisieren der alternativen Namen für die Eigenschaft
Ich versuche, herauszufinden, wie kann ich geben Sie Alternative Namen für die Eigenschaft mit ASP.NET WebApi - und für die Deserialisierung + - Serialisierung und JSON + XML. Ich habe nur aufgedeckt Teillösungen so weit.
Ich möchte aufzeigen, die property-Namen in Kleinbuchstaben mit Unterstrich und (zum Beispiel Willen) haben unterschiedliche interne Bezeichnungen:
Externe:
- Feld-eine
- Feld-zwei
Intern:
- ItemOne
- ItemTwo
Für die Prüfung, hier ein BEITRAG controller-Aktion, die nur relais, was es empfängt:
//POST api/values
public TestSerialization Post([FromBody]TestSerialization value)
{
return value;
}
Und eine test Einheit:
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; }
}
Bisher, die ich gefunden habe:
- [DataMember(Name = "x")] hat keine Wirkung auf die Serialisierung in beiden Richtungen
- [JsonProperty(Name = "x")] funktioniert bei der Serialisierung (der Rückgabewert) bei der Verwendung von JSON. (Es ist ein JSON.NET Attribut, das Standard-serializer).
Für test-Daten, die ich eingebe, 4 Eigenschaften, um zu sehen, welcher Wert wird deserialisiert, und was der name der Eigenschaft ist auf der Deserialisierung
- ItemOne = "Wert"
- ItemTwo = "Wert B"
- Feld-eins = "Richtige 1"
- Feld-zwei = "2 Richtige"
Wie kann ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Ihrer Erkenntnisse/Schlussfolgerungen sind falsch...Sie können, versuchen Sie Folgendes statt:
Sollte diese Arbeit für beide Standard-Xml - & Json-Formatierer von web-api und für die Serialisierung & Deserialisierung.
Sollten die folgenden arbeiten für Json formatter und nur für die Serialisierung & Deserialisierung.
Können Sie erzwingen, Asp.Net die Verwendung der JSON-deserializer durch die übergabe eines JObject auf Ihre Aktion, obwohl es ist ein wenig ärgerlich zu haben, es zu tun wie diese.
Dann können Sie mit ihm arbeiten als JObject oder rufen Sie
.ToObject<T>();
die dann zu Ehren derJsonProperty
Attribut.