Hallo miteinander
ich versuche gerade, einen JSON String zu deserialisieren und es kommt diese Fehlermeldung: Das Objekt des Typs "Newtonsoft.Json.Linq.JObject" kann nicht in Typ "Root" umgewandelt werden.
Ich habe mir die Datenklasse mit diesem Konverter aus dem JSON erstellen lassen: json2csharp.com
Herausgekommen ist Folgendes (ich hab die Klasse
Spoiler anzeigen
Das Original-JSON sieht so aus:
Spoiler anzeigen
Jetzt sind ja einige der Properties nicht VB-konform und wurden daher vom Konverter abgeändert, z.B. die erste ist:
Also hab ich mir gedacht ich ersetze alle diese Propertynamen mit der korrigierten Version schon vor dem Deserialisieren im JSON-String mit dieser Funktion:
Ich bekomme aber immer noch diesen Fehler.
Weiss jemand woran das liegt oder sieht einen offensichtlichen Fehler, bzw. kann man diese Korrektur dieser Propertynames irgendwie automatisieren?
Ich deserialisiere folgendermassen:
Grüsse, kafffee
ich versuche gerade, einen JSON String zu deserialisieren und es kommt diese Fehlermeldung: Das Objekt des Typs "Newtonsoft.Json.Linq.JObject" kann nicht in Typ "Root" umgewandelt werden.
Ich habe mir die Datenklasse mit diesem Konverter aus dem JSON erstellen lassen: json2csharp.com
Herausgekommen ist Folgendes (ich hab die Klasse
MusicBrainzAlbumData
aussenrum gemacht):VB.NET-Quellcode
- Public Class MusicBrainzAlbumData
- Public Class Area
- Public Property id As String
- Public Property name As String
- Public Property type As Object
- '<JsonProperty("sort-name")>
- Public Property sortname As String
- Public Property disambiguation As String
- '<JsonProperty("iso-3166-1-codes")>
- Public Property iso31661codes As List(Of String)
- '<JsonProperty("type-id")>
- Public Property typeid As Object
- End Class
- Public Class CoverArtArchive
- Public Property front As Boolean
- Public Property count As Integer
- Public Property artwork As Boolean
- Public Property darkened As Boolean
- Public Property back As Boolean
- End Class
- Public Class Disc
- Public Property id As String
- Public Property offsets As List(Of Integer)
- Public Property sectors As Integer
- '<JsonProperty("offset-count")>
- Public Property offsetcount As Integer
- End Class
- Public Class Medium
- Public Property discs As List(Of Disc)
- Public Property format As String
- '<JsonProperty("format-id")>
- Public Property formatid As String
- Public Property position As Integer
- '<JsonProperty("track-count")>
- Public Property trackcount As Integer
- Public Property title As String
- End Class
- Public Class Release
- '<JsonProperty("packaging-id")>
- Public Property packagingid As String
- '<JsonProperty("text-representation")>
- Public Property textrepresentation As TextRepresentation
- Public Property id As String
- Public Property datum As String
- Public Property disambiguation As String
- Public Property quality As String
- Public Property title As String
- Public Property barcode As String
- Public Property media As List(Of Medium)
- Public Property status As String
- Public Property asin As String
- '<JsonProperty("status-id")>
- Public Property statusid As String
- Public Property packaging As String
- '<JsonProperty("release-events")>
- Public Property releaseevents As List(Of ReleaseEvent)
- Public Property country As String
- '<JsonProperty("cover-art-archive")>
- Public Property coverartarchive As CoverArtArchive
- End Class
- Public Class ReleaseEvent
- Public Property datum As String
- Public Property area As Area
- End Class
- Public Class Root
- Public Property sectors As Integer
- Public Property offsets As List(Of Integer)
- '<JsonProperty("offset-count")>
- Public Property offsetcount As Integer
- Public Property releases As List(Of Release)
- Public Property id As String
- End Class
- Public Class TextRepresentation
- Public Property script As String
- Public Property language As String
- End Class
- End Class
Das Original-JSON sieht so aus:
{"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offsetcount":11,"sectors":184035,"releases":[{"datum":"2000-02-08","status":"Official","quality":"normal","media":[{"discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offsetcount":11,"sectors":184035},{"sectors":184035,"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsetcount":11,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"sectors":184062,"offsetcount":11,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980]},{"offsetcount":11,"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","sectors":185735,"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489]},{"sectors":184185,"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsetcount":11,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]}],"format":"CD","trackcount":11,"position":1,"title":"","formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31"}],"releaseevents":[{"datum":"2000-02-08","area":{"typeid":null,"iso31661codes":["US"],"name":"United States","id":"489ce91b-6658-3307-9877-795b68554c98","disambiguation":"","type":null,"sortname":"United States"}}],"packagingid":"ec27701a-4a22-37f4-bfac-6616e0f9750a","title":"The Better Life","asin":"B00004C4QQ","textrepresentation":{"script":"Latn","language":"eng"},"statusid":"4e304316-386d-3409-af2e-78857eec5cfe","id":"717b5af5-3552-450e-8505-732872c2fe32","barcode":"601215392029","country":"US","disambiguation":"","packaging":"Jewel Case","coverartarchive":{"back":true,"count":5,"front":true,"artwork":true,"darkened":false}},{"coverartarchive":{"count":1,"back":false,"front":true,"artwork":true,"darkened":false},"packaging":null,"disambiguation":"","barcode":"601215392029","country":"GB","textrepresentation":{"script":"Latn","language":"eng"},"asin":"B00004C4QQ","statusid":"4e304316-386d-3409-af2e-78857eec5cfe","id":"39797c0e-b623-3d75-be9d-91791f660308","title":"The Better Life","packagingid":null,"releaseevents":[{"datum":"2000-09-18","area":{"id":"8a754a16-0027-3a29-b6d7-2b40ea0481ed","name":"United Kingdom","iso31661codes":["GB"],"typeid":null,"sortname":"United Kingdom","type":null,"disambiguation":""}}],"status":"Official","quality":"normal","media":[{"discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offsetcount":11,"sectors":184035},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"sectors":184035,"offsetcount":11,"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-"},{"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offsetcount":11,"sectors":184062,"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980]},{"offsetcount":11,"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","sectors":185735,"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489]},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsetcount":11,"sectors":184185}],"format":"CD","trackcount":11,"position":1,"title":"","formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31"}],"datum":"2000-09-18"},{"country":"DE","barcode":"601215392029","id":"55acdded-591e-36dd-bc40-15d5a07c0125","textrepresentation":{"script":"Latn","language":"eng"},"statusid":"4e304316-386d-3409-af2e-78857eec5cfe","asin":null,"title":"The Better Life","coverartarchive":{"count":3,"back":true,"front":true,"artwork":true,"darkened":false},"packaging":"Jewel Case","disambiguation":"","datum":"2000-09-11","packagingid":"ec27701a-4a22-37f4-bfac-6616e0f9750a","releaseevents":[{"datum":"2000-09-11","area":{"name":"Germany","id":"85752fda-13c4-31a3-bee5-0e5cb1f51dad","typeid":null,"iso31661codes":["DE"],"sortname":"Germany","disambiguation":"","type":null}}],"quality":"normal","media":[{"title":"","position":1,"formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31","trackcount":11,"format":"CD","discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"offsetcount":11,"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","sectors":184035},{"sectors":184035,"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsetcount":11,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offsetcount":11,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","sectors":184062,"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980]},{"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"offsetcount":11,"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","sectors":185735},{"sectors":184185,"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsetcount":11,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offsets":[150,17850,37863,55312,70023,90119,108153,122391,142191,157077,168476],"sectors":185577,"id":"wciuJa_ZuiT4STtw.ej0TTA0w4Y-","offsetcount":11}]}],"status":"Official"},{"disambiguation":"","packaging":null,"coverartarchive":{"front":true,"artwork":true,"darkened":false,"count":1,"back":false},"title":"The Better Life","id":"6e10b5fe-6d8a-3503-957c-9162969c9b73","statusid":"4e304316-386d-3409-af2e-78857eec5cfe","textrepresentation":{"language":"eng","script":"Latn"},"asin":"B00005GT8I","country":"JP","barcode":"4988067044556","quality":"normal","media":[{"format":"CD","discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offsetcount":11,"sectors":184035},{"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsetcount":11,"sectors":184035,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980],"offsetcount":11,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","sectors":184062},{"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","offsetcount":11,"sectors":185735},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsetcount":11,"sectors":184185}],"trackcount":11,"title":"","position":1,"formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31"}],"status":"Official","releaseevents":[{"datum":"2000-06-28","area":{"name":"Japan","id":"2db42837-c832-3c27-b4a3-08198f75693c","typeid":null,"iso31661codes":["JP"],"sortname":"Japan","type":null,"disambiguation":""}}],"packagingid":null,"datum":"2000-06-28"},{"packagingid":null,"releaseevents":[{"area":{"sortname":"Europe","disambiguation":"","type":null,"name":"Europe","id":"89a675c2-3e37-3518-b83c-418bad59a85a","typeid":null,"iso31661codes":["XE"]},"datum":"2001-06-13"}],"status":"Official","media":[{"trackcount":11,"discs":[{"offsetcount":11,"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","sectors":184035,"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937]},{"sectors":184035,"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsetcount":11,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980],"sectors":184062,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offsetcount":11},{"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"sectors":185735,"offsetcount":11,"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-"},{"sectors":184185,"offsetcount":11,"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]}],"format":"CD","formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31","position":1,"title":""},{"formatid":"8a08dc62-1aa2-34de-a904-fa467c53052c","title":"Bonus Disc","position":2,"trackcount":5,"format":"Enhanced CD","discs":[{"sectors":92060,"id":"tVNbsuVZyiciUmaWoEIQwJFf7Zo-","offsetcount":5,"offsets":[150,23225,40820,54902,72100]}]}],"quality":"normal","datum":"2001-06-13","coverartarchive":{"darkened":false,"artwork":true,"front":true,"back":false,"count":1},"packaging":null,"disambiguation":"Bonus Disc Edition","barcode":"044001445422","country":"XE","asin":null,"textrepresentation":{"language":"eng","script":"Latn"},"statusid":"4e304316-386d-3409-af2e-78857eec5cfe","id":"48bb1fd9-a45c-3fc6-aca7-075d1ef08f5c","title":"The Better Life"},{"datum":"2000","status":"Official","media":[{"format":"CD","discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"sectors":184035,"offsetcount":11,"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-"}],"trackcount":11,"formatid":"9712d52a-4509-3d4b-a1a2-67c88c643e31","title":"","position":1}],"quality":"normal","packagingid":"ec27701a-4a22-37f4-bfac-6616e0f9750a","releaseevents":[{"datum":"2000","area":{"id":"71bbafaa-e825-3e15-8ca9-017dcad1748b","name":"Canada","iso31661codes":["CA"],"typeid":null,"sortname":"Canada","disambiguation":"","type":null}}],"title":"The Better Life","barcode":"601215392029","country":"CA","statusid":"4e304316-386d-3409-af2e-78857eec5cfe","textrepresentation":{"language":"eng","script":"Latn"},"asin":null,"id":"234bbb67-dc25-4114-90cc-b0a7fdc47fa0","disambiguation":"","coverartarchive":{"darkened":false,"front":true,"artwork":true,"back":true,"count":2},"packaging":"Jewel Case"}],"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937]}
Jetzt sind ja einige der Properties nicht VB-konform und wurden daher vom Konverter abgeändert, z.B. die erste ist:
Also hab ich mir gedacht ich ersetze alle diese Propertynamen mit der korrigierten Version schon vor dem Deserialisieren im JSON-String mit dieser Funktion:
VB.NET-Quellcode
- Private Function CorrectPropertyNames(argJSON As String) As String
- Dim Result As String = argJSON
- Result = Result.Replace("sort-name", "sortname")
- Result = Result.Replace("iso-3166-1-codes", "iso31661codes")
- Result = Result.Replace("type-id", "typeid")
- Result = Result.Replace("offset-count", "offsetcount")
- Result = Result.Replace("format-id", "formatid")
- Result = Result.Replace("track-count", "trackcount")
- Result = Result.Replace("packaging-id", "packagingid")
- Result = Result.Replace("text-representation", "textrepresentation")
- Result = Result.Replace("date", "datum")
- Result = Result.Replace("status-id", "statusid")
- Result = Result.Replace("release-events", "releaseevents")
- Result = Result.Replace("cover-art-archive", "coverartarchive")
- Return Result
- End Function
Ich bekomme aber immer noch diesen Fehler.
Weiss jemand woran das liegt oder sieht einen offensichtlichen Fehler, bzw. kann man diese Korrektur dieser Propertynames irgendwie automatisieren?
Ich deserialisiere folgendermassen:
Grüsse, kafffee
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()