Ich erhalte JSON von einer bestimmten API hat eine dynamische Eigenschaft.C# JSONConverter benutzerdefinierte Serialisierung
Ich habe einen benutzerdefinierten JsonConverter Ansatz genommen. Gibt es einen einfacheren Weg, damit umzugehen?
Hier ist die JSON zurückgegeben:
{
"kind": "tm:ltm:pool:poolstats",
"generation": 1,
"selfLink": "https://localhost/mgmt/tm/ltm/pool/test-mypoolname_https_main/stats?ver=12.1.2",
"entries": {
"https://localhost/mgmt/tm/ltm/pool/test-mypoolname_https_main/~Common~test-mypoolname_https_main/stats": {
"nestedStats": {
"kind": "tm:ltm:pool:poolstats",
"selfLink": "https://localhost/mgmt/tm/ltm/pool/test-mypoolname_https_main/~Common~test-mypoolname_https_main/stats?ver=12.1.2"
}
}
}
}
Die "entries": { "https://..." }
, dass ein Teil ist, der immer ändert, je nachdem, was ich von der API anfordern.
Hier ist die Klassenstruktur, die diese Informationen halten:
public partial class PoolStatistics
{
[JsonProperty("entries")]
public EntriesWrapper Entries { get; set; }
[JsonProperty("generation")]
public long Generation { get; set; }
[JsonProperty("kind")]
public string Kind { get; set; }
[JsonProperty("selfLink")]
public string SelfLink { get; set; }
[JsonConverter(typeof(PoolEntriesConverter))]
public partial class EntriesWrapper
{
public string Name { get; set; }
[JsonProperty("nestedStats")]
public NestedStats NestedStats { get; set; }
}
public partial class NestedStats
{
[JsonProperty("kind")]
public string Kind { get; set; }
[JsonProperty("selfLink")]
public string SelfLink { get; set; }
}
}
außer Kraft setzen zu Deserialize über die folgenden auf dem PoolEntriesConverter
:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
NestedStats nestedStats = (jo.First.First[NESTED_STATS]).ToObject<NestedStats>();
EntriesWrapper entries = new EntriesWrapper
{
NestedStats = nestedStats,
Name = jo.First.Path
};
return entries;
}
außer Kraft gesetzt WriteJson (Serialisierung) - Das wirft eine Ausnahme:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
EntriesWrapper entries = (EntriesWrapper)value;
JObject jo = new JObject(
new JProperty(NESTED_STATS, entries.NestedStats),
new JProperty(entries.Name, entries.Name));
}
Die Fehlerzustände:
System.ArgumentException: 'konnte nicht bestimmen JSON-Objekttyp für Typ F5IntegrationLib.Models.Pools.PoolStatistics + NestedStats'