Überschreiben Json name der Eigenschaft in c#
Habe ich eine Klasse mit folgenden Feldern. Diese Eigenschaften werden serialisiert als json-Objekt aus, wenn es benötigt zum Aufruf eines externen rest-API-Methode.
public class Customer
{
[JsonProperty(PropertyName = "email")]
public string Email { get; set; }
[JsonProperty(PropertyName = "prop[listId]")]
public string Test{ get; set; }
//there are lot of properties
}
In der Eigenschaft name Test
externe API-service-Aufruf erforderlich, einige Sache wie die folgende json eingereicht Namen format.
prop[7]
In meinem Fall 7
können geändert werden, entsprechend der Umgebung, wie test,dev und prod.Also, was ich bin auf der Suche nach einem Weg zu bewegen, dass listId Wert in app.config .
Ich habe versucht, es zu tun als zu Folgen, aber es ist nicht erlaubt das zu tun.für die listIdValue
zuweisen, wenn der Konstante Wert wird es funktionieren.
private string listIdValue = ConfigurationManager.AppSettings["ListIdValue"];
[JsonProperty(PropertyName = "prop["+listIdValue +"]")]
public string Test{ get; set; }
- Warum? warum sind diese json-Eigenschaften benötigt?
- Sie haben viele Eigenschaften? Könnten Sie serialisieren möchten "manuell", nur die Einstellung der Eigenschaften eines
JObject
? - Wenn die Serialisierung Bibliothek (Json.Net?) verwendet
TypeDescriptor.GetAttributes
für Reflexion, es sollte möglich sein, fügen Sie diese zur Laufzeit. Welche Bibliothek verwendest du? - Ich habe geändert, die Frage zu add-in details.
- Vor der de-serialising JSON, finden und ersetzen Sie die JSON-text, der verwendet jede Art von debugging-name der Eigenschaft.
OnBeforeDeserialisation += (s, t) => t.Replace("prop[x]", "prop[y]")
- Können Sie einige Beispiel-code, wenn möglich 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie überschreiben
DefaultContractResolver
und Umsetzung Ihrer eigenen Mechanismus für die Bereitstellung derPropertyName
(JSON). Ich werde eine vollständige Beispiel-code zeigen, der Deserialisierung und Serialisierung mit einer Laufzeit generiertPropertyName
. Derzeit werden dieTest
FeldTest5
(in allen Modellen). Sie implementieren sollten, Ihren eigenen Mechanismus (über ein Attribut, ein reservierter name einer Tabelle oder was auch immer.Ausgabe:
Wie Sie sehen, wenn wir
Serialize(..., false)
- das Feld name istTest
und wenn wirSerialize(..., true)
- das Feld name istTest5
wie erwartet. Dies funktioniert auch für die Deserialisierung.Ich habe diese Antwort als insperation für meine Antwort: https://stackoverflow.com/a/20639697/773879
Definieren Sie verschiedene Konfigurations-Modi wie Debug - /Release - /QA - /Staging -
Dann hinzufügen Zusammenstellung der Symbole für jeden einzelnen von Ihnen. und in deinem code sowas:
Folgenden nehme ich an, Sie definiert: QS-und STAGING -
Können Sie diese Konfiguration für das automatisierte bereitstellen, zu dem Sie viel Zeit sparen.