Ich bin neu in der Arbeit mit JSON - Ich arbeite mit einer bestehenden JSON-Datenstruktur und versucht, die Daten auszugeben, aber ein Teil der vorhandenen Datenstruktur hat mich ratlos.C# Deserialize Nested JSON
Hier finden Sie meine Json Daten:
{"supplier":
{
"supplierid":3590,
"code":"ENCLES",
"name":"Les Miserables",
"analyses":[],
"amenities":[],
"info":
"{\"Supplier\":
{
\"Name\":\"Les Miserables\",
\"LastUpdate\":\"2011-11-01T22:16:06Z\",
\"Address3\":\"London\",
\"Address2\":\"51 Shaftesbury Avenue\",
\"PostCode\":\"W1D 6BA\",
\"Address1\":\"Queen's Theatre\",
\"Address4\":\"\",
\"Address5\":\"\",
\"SupplierId\":3590,
\"SupplierCode\":\"ENCLES\"
}
}",
...
}
Das Bit, das mich ist die Info-Daten stapfte hat - es eine weitere verschachtelte JSON-String ist.
Meine Klasse ist:
public class TheatreListing
{
public supplier supplier;
}
public class supplier
{
public int? supplierid { get; set; }
public string code { get; set; }
public string name { get; set; }
public listingInfo info { get; set; }
}
public class listingInfo
{
public Address Supplier { get; set; }
}
public class Address
{
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string Address4 { get; set; }
public string Address5 { get; set; }
public string PostCode { get; set; }
}
Mein Code, um zu versuchen und auf die Daten zugreifen ist:
TheatreListing tl = Json.Decode<TheatreListing>(json);
StringBuilder sbb = new StringBuilder();
sbb.Append("Name = " + tl.supplier.name.ToString());
sbb.Append("<br />Supplier ID = " + tl.supplier.supplierid.ToString());
sbb.Append("<br />Code = " + tl.supplier.code.ToString());
sbb.Append("<br />Address = " + tl.supplier.info.Supplier.Address2.ToString());
litOutput.Text += sbb.ToString();
Die Fehlermeldung erhalte ich ist:
Cannot convert object of type 'System.String' to type 'listingInfo'
Kann jemand bitte führe mich auf den Fehler meiner Wege hier?
Prost
Nigel
Ich würde vorschlagen, das innere Zeug zu einem 'string' zu deserialisieren und dann das in einem 2. Durchlauf zum korrekten Typ zu deserialisieren. Es könnte möglich sein, einen benutzerdefinierten Converter zu registrieren, aber ... (im Idealfall wäre es nicht so hässlich verschachtelt: - /) –
Es tut mir leid, sollte "info": "{\" Supplier \ ": ... nicht" info "sein: {\" Supplier \ ": (Klammer ohne vorangestelltes Zitat) und dasselbe für das Ende der Klammer? – mho