definiert Serialisierung Ich habe folgende JSON-String:Json.NET deserialisieren oder JSON-String und Karteneigenschaften auf unterschiedlichen Eigenschaftsnamen zur Laufzeit
{
"values": {
"details": {
"property1": "94",
"property2": "47",
"property3": "32",
"property4": 1
},
count: 4
}
}
ich das folgende Modell abzubilden werde:
public class Details
{
public string property1 { get; set; }
public string property2 { get; set; }
public string property3 { get; set; }
public int property4 { get; set; }
}
public class Values
{
public Details details { get; set; }
public int count { get; set; }
}
public class RootObject
{
public Values values { get; set; }
}
ich möchte verschiedene Namen zur Laufzeit die diese Eigenschaftsnamen zuordnen können, wenn diese JSON-String wie folgt Deserialisieren:
JsonConvert.DeserializeObject<RootObject>(jsonString);
Zum Beispiel möchte ich im Deserialisierungsprozess den Namen von "property1" zu "differen_property_name1" oder "differen_property_name2" oder "differen_property_name3" deserialisieren. Da mir den neuen Namen zur Laufzeit Wahl (der neue Name des „property1“ Namen Ich werde das ändern), kann ich nicht die Lösung verwendet JsonPropertyAttribute verwenden, wie hier vorgeschlagen:
.NET NewtonSoft JSON deserialize map to a different property name
Eine der Antworten der obigen Frage (Jacks Antwort) verwendet die Vererbung von DefaultContractResolver, aber es scheint in diesem Fall nicht zu funktionieren.
aktualisiert
Später, ich brauchte das Objekt, das ich von der Deserialisierung bekam serialisiert werden und die Eigenschaften zu unterschiedlichen Eigenschaftsnamen zuordnen, zur Laufzeit definiert. habe ich die gleiche Methode wie Brian die Serialisierung zu tun vorgeschlagen:
ich das Wörterbuch verwendet meine neue Eigenschaftsnamen zur Karte:
var map = new Dictionary<Type, Dictionary<string, string>>
{
{
typeof(Details),
new Dictionary<string, string>
{
{"property1", "myNewPropertyName1"},
{"property2", "myNewPropertyName2"},
{"property3", "myNewPropertyName3"},
{"property4", "myNewPropertyName4"}
}
}
};
und dann habe ich Brians DynamicMappingResolver das Objekt wie folgt zu serialisiert:
var settings = new JsonSerializerSettings
{
ContractResolver = new DynamicMappingResolver(map)
};
var root = JsonConvert.SerializeObject(myObjectInstance, settings);
Weil ich in der Laufzeit entscheiden wollen, welche neuen Namen ich auf die Eigenschaft geben wollen und mit JsonPropertyAttribute Sie haben eine „hart codiert“ Namen zu verwenden. –
Ein Weg (obwohl es hässlich sein könnte) wäre, den JSON zuerst zu deserialisieren und dann das deserialisierte Objekt dem Objekt mit den neuen Namen zuzuordnen. Es mag einen eleganteren Weg geben. – Tim
@Tim, wie würden Sie das deserialisierte Objekt einem Objekt mit den neuen Namen zuordnen, wenn die neuen Namen zur Laufzeit definiert werden müssen? –