Ich rufe einen REST-Endpunkt von C# und ich empfange JSON, die in ein Objekt serialisiert wird. Eine der Eigenschaften dieses Objekts ist eine dynamische Eigenschaft. Der Wert der dynamischen Eigenschaft als anonymes Objekt auf dem Server Seite wie diese gesetzt:Konvertieren von JObject in ein dynamisches Objekt
myObject.MyDynamicProp = new { Id = "MyId2134", Name = "MyName" };
Auf der Client-Seite des Wert der dynamischen Eigenschaft von der Json Serialisierung ist ein JObject den folgenden Wert enthält:
{{
"id": "MyId2134",
"Name": "MyName"
}}
ich hätte anknüpfen können diese die Eigenschaften wie zuzugreifen:
var s = myObject.MyDynamicProp.Name;
aber ich va bekommen muss nicht die Eigenschaft Name finden statt lue wie folgt aus:
var s = myObject.MyDynamicProp["Name"].Value;
Ich versuchte, das JObject zu einem dynamischen Objekt wie diese Umwandlung, aber es gibt JObject:
var dyn = myObject.MyDynamicProp.ToObject<dynamic>();
Wie kann ich die dynamische Eigenschaft Wert zu konvertieren, so dass ich seine Eigenschaften nennen kann direkt ?
var s = myObject.MyDynamicProp.Name;
UPDATE ...
lief ich die folgende
dynamic d = JsonConvert.DeserializeObject("{\"MyDynamicProp\": {\"id\": \"MyId2134\", \"Name\": \"MyName\"}}");
string name = d.MyDynamicProp.Name;
die mir die folgenden den Fehler gibt:
{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: `Newtonsoft.Json.Linq.JObject' does not contain a definition for `MyDynamicProp'
at Microsoft.Scripting.Interpreter.ThrowInstruction.Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) [0x00027]
Ich möchte hinzufügen, dass dies eine ist Xamarin iOS-Projekt und der Code befindet sich in einer PCL-Bibliothek.
Warum dies funktioniert: 'JObject' leitet indirekt von' JToken' die Arbeitsgeräte [ 'IDynamicMetaObjectProvider'] (https://msdn.microsoft.com/en-us/library/System.Dynamic.IDynamicMetaObjectProvider.aspx) . Es ist diese Schnittstelle, die 'dynamic' erlaubt zu arbeiten. – Richard
Ja, tatsächlich. Danke, Richard. Kann ich das an meine Antwort anhängen? –
Fühlen Sie sich frei, dies zu tun. – Richard