public T GetFirstInstance<T>(string propertyName, string json)
{
using (var stringReader = new StringReader(json))
using (var jsonReader = new JsonTextReader(stringReader))
{
while (jsonReader.Read())
{
if (jsonReader.TokenType == JsonToken.PropertyName
&& (string)jsonReader.Value == propertyName)
{
jsonReader.Read();
var serializer = new JsonSerializer();
return serializer.Deserialize<T>(jsonReader);
}
}
return default(T);
}
}
public class MyType
{
public string Text { get; set; }
}
public void Test()
{
string json = "{ \"PropOne\": { \"Text\": \"Data\" }, \"PropTwo\": \"Data2\" }";
MyType myType = GetFirstInstance<MyType>("PropOne", json);
Debug.WriteLine(myType.Text); // "Data"
}
Dieser Ansatz vermeidet das Deserialisieren des gesamten Objekts. Aber beachten Sie, dass dies nur die Leistung verbessern wird, wenn der JSON-Wert groß ist, und die Eigenschaft, die Sie deserializing sind relativ früh in den Daten. Ansonsten solltest du einfach das ganze deserialisieren und die Teile herausziehen, die du willst, wie jcwrequests answer zeigt.
Für eine bessere Wiederverwendbarkeit leicht aktualisiert. –
Diese Methode ist darin enthalten, dass sie die erste Eigenschaft "PropOne" irgendwo auf jeder Ebene fängt, nicht nur in der Wurzel der Baumstruktur. Es kann behoben werden, indem Sie die Ebene verfolgen und nur den korrekten Eigenschaftsnamen auf der Stammebene akzeptieren. – hultqvist
Beachten Sie, dass dies auch nützlich sein kann, wenn Sie nicht sicher sind, was die JSON-Zeichenfolge ist, die Sie dekodieren, und Sie müssen eine Eigenschaft lesen, um es herauszufinden. – starbeamrainbowlabs