Fehler beim Deserialisieren von JSON - System.InvalidCastException

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    kafffee schrieb:

    Gutes Neues! Hoff du bist gut reingeschlittert

    Jo, in der Tat. War gut. Ich hoffe doch inständig dass dein Neujahr ebenso gut war?

    kafffee schrieb:

    Okay ich denke den Code hab ich verstanden. out wäre also das Äquivalent zu ByRef in VB?

    Ja, so ist es.

    kafffee schrieb:

    Wenn das jetzt eine Property As DateTime gewesen wäre, hätte ich im Getter deinen Code platziert, aber wenn das kein DateTime ist??


    Der einzige wirkliche Unterschied zwischen DateTime und DateTimeOffset, ist dass DateTimeOffset den Offset zu UTC+0 mitspeichert.

    Man kann aber zwischen den beiden hin- und herkonvertieren. Da müsste es eine Eigenschaft ​LocalDateTime geben. Das liefert dir ein DateTime Objekt zurück
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    @siycah

    Hab jetzt das hier. Aber da meckert er, dass Konvertierung System.DateTime to String nicht möglich im ersten Argument. ToString hab ich ausprobiert, das will er auch nicht...

    C#-Quellcode

    1. [JsonProperty("date")]
    2. private DateTimeOffset _Date;
    3. public DateTimeOffset Date
    4. {
    5. get
    6. {
    7. return (DateTime.TryParseExact(_Date.LocalDateTime, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out var timestamp));
    8. }
    9. set
    10. {
    11. }
    12. }



    Mein Silvester war, gemessen an das der letzten Jahre, auch gut. Aber da ist noch Luft nach oben nächstes Jahr :thumbsup:
    Das wird so nicht hinhauen, weil Json.Net keine privaten Member sehen kann.

    Das muss schon public sein.

    Bei deinem Date Property versuchst du auch gerade ein Boolean zurückzugeben, weshalb der gerade quängelig wird.
    Als Property würde ich das auch nicht schreiben. Da wäre eine Methode eher angebracht. Properties sind wirklich nur zum Ein-/Auslesen von Werten und nicht, um irgendwelche Rechnungen zu machen.

    Probier mal:

    C#-Quellcode

    1. public DateTime? GetDate() {
    2. if (DateTime.TryParseExact(_Date.LocalDateTime, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out var timestamp)) {
    3. return timestamp;
    4. }
    5. // Fehlerfall
    6. return null; // oder schmeiß eine Exception, wie es dir beliebt. Hauptsache du behandelst den Fehler irgendwie.
    7. }
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)

    siycah schrieb:

    Bei deinem Date Property versuchst du auch gerade ein Boolean zurückzugeben, weshalb der gerade quängelig wird.


    Ja stimmt das wäre dann das Nächte gewesen, soweit war ich noch gar nicht :)

    Aber für das erste Argument will er tatsächlich einen String haben. Naja gut ich könnte einfach einen String hart reincoden, ich brauche den Wert ja sowieso nicht...

    Edit @siycah

    Hab das grad mal probiert, aber ich komm mit dem C# glaubich nicht ganz klar:

    C#-Quellcode

    1. public class DateConverter
    2. {
    3. public DateTimeOffset? GetDate()
    4. {
    5. if (DateTime.TryParseExact("2015-12-25", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out var timestamp))
    6. {
    7. return timestamp;
    8. }
    9. // Fehlerfall
    10. return null; // oder schmeiß eine Exception, wie es dir beliebt. Hauptsache du behandelst den Fehler irgendwie.
    11. }
    12. public partial class Welcome
    13. {
    14. [JsonProperty("date")]
    15. //private DateTimeOffset _Date;
    16. public DateTimeOffset Date {
    17. get
    18. {return DateConverter.} //hier schlägt er mir GetDate nicht vor??
    19. set { }
    20. }
    21. }

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kafffee“ ()

    C# ist erstmal nichts anderes als VB im Hintergrund. Nur ein paar mehr Features.

    Du versuchst da aus einer Klasse eine Methode aufzurufen, ohne dass du von der Klasse eine Instanz erstellt hast, oder dass die Methode static (also shared) ist.

    ​public static class DateConverter und ​public static DateTimeOffset? GetDate() :)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Gib mir mal ein bisschen Zeit. Ich bastel mal.

    Melde mich gleich zurück.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Dann spare ich mir die weitere Mühe. Ich konnte das Problem nämlich gar nicht reproduzieren.
    War schon dabei durch alle Properties zu laufen und mir alles auszugeben ^^
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Okay wieder ein Stück weiter :)

    Guck mal was ich grad entdeckt hab in der generierten Klasse. Hast das schon gesehen? Vielleicht können wir uns mit ner kleinen Abänderung das ganze Gedöns sparen?:

    C#-Quellcode

    1. internal static class Converter
    2. {
    3. public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
    4. {
    5. MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
    6. DateParseHandling = DateParseHandling.None,
    7. Converters =
    8. {
    9. FirstReleaseDateConverter.Singleton,
    10. new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } //hier statt .AssumeUniversal was Anderes?? .AdjustToUniversal hab ich schon probiert, das geht nicht :-(
    11. },
    12. };
    13. }


    Ansonsten muss ich hiermit wahrscheinlich auch was machen:
    Versteh ich vorne und hinten nicht, und der VBNet Übersetzer kanns nicht verarbeiten...
    Was macht ein implicit operator und was bedeutet das =>?

    C#-Quellcode

    1. public partial struct FirstReleaseDate
    2. {
    3. public DateTimeOffset? DateTime;
    4. public long? Integer;
    5. public static implicit operator FirstReleaseDate(DateTimeOffset DateTime) => new FirstReleaseDate { DateTime = DateTime };
    6. public static implicit operator FirstReleaseDate(long Integer) => new FirstReleaseDate { Integer = Integer };
    7. }

    kafffee schrieb:

    Was macht ein implicit operator


    Ein implicit operator erlaubt es dir, eine eigene Konvertierung für einen Typen zu schreiben. So kannst du zum Beispiel spezifizieren, dass deine Klasse implizit (also ohne Cast) zu einem anderen Typen gewandelt werden kann.

    In diesem konkreten Fall ist das eine implizite Umwandlung von einem DateTimeOffset zu einem FirstReleaseDate.

    kafffee schrieb:

    was bedeutet das =>?


    Das ist der sog. Lambda-Pfeil. Damit kannst du anonyme Funktionen schreiben. Die gibt's auch in VB, da sind die nur (mMn) ekelig umgesetzt.

    C#-Quellcode

    1. var myAnonymousFunc = (x, y) => {
    2. // tue coole Sachen hier, ohne dass du diese Methode in deiner Klasse haben musst (deswegen anonym)
    3. }


    gleicht
    (und ich hoffe ich verbasel die Syntax nicht)

    VB.NET-Quellcode

    1. dim myAnonymousFunc = Sub(ByVal x, ByVal y)
    2. ' tue coole Sachen hier [...]
    3. End Sub


    kafffee schrieb:

    VBNet Übersetzer kanns nicht verarbeiten...


    Ja, leider ist das so, dass C# eine mächtigere Sprache ist, als VB. Im Hintergrund ist es alles das selbe (MSIL), aber in C# gibt's mehr Möglichkeiten, den Code deinem Willen entsprechend zu verbiegen.
    Für mich persönlich ist es auch einfacher zu verstehen. Ich komme mit der überheblichen Verbosität von VB kaum klar. Und auch, dass es case-insensitive ist <X

    kafffee schrieb:

    Hast das schon gesehen?


    Ich muss gestehen: nein. So genau habe ich da nicht draufgeschaut. Aber ich konnte dein JSON auch probemlos parsen. Da gab's keine Exceptions.

    Spoiler anzeigen

    C#-Quellcode

    1. namespace Test {
    2. using System.Reflection;
    3. using QuickType;
    4. public static class TestKafffee {
    5. const string TestJson =
    6. """
    7. {
    8. "asin": "B00004C4QQ",
    9. "status-id": "4e304316-386d-3409-af2e-78857eec5cfe",
    10. "packaging": "Jewel Case",
    11. "packaging-id": "ec27701a-4a22-37f4-bfac-6616e0f9750a",
    12. "title": "The Better Life",
    13. "country": "US",
    14. "quality": "normal",
    15. "date": "2000-02-08",
    16. "disambiguation": "",
    17. "cover-art-archive": {
    18. "darkened": false,
    19. "artwork": true,
    20. "back": true,
    21. "front": true,
    22. "count": 5
    23. },
    24. "status": "Official",
    25. "barcode": "601215392029",
    26. "text-representation": {
    27. "language": "eng",
    28. "script": "Latn"
    29. },
    30. "media": [
    31. {
    32. "tracks": [
    33. {
    34. "recording": {
    35. "length": 234466,
    36. "disambiguation": "",
    37. "first-release-date": "1997",
    38. "id": "f5f6068d-b660-4be3-a8aa-81c55c16d687",
    39. "video": false,
    40. "title": "Kryptonite"
    41. },
    42. "id": "80b869b5-0982-3bde-bfd4-6481553822da",
    43. "number": "1",
    44. "title": "Kryptonite",
    45. "position": 1,
    46. "length": 233826
    47. },
    48. {
    49. "position": 2,
    50. "title": "Loser",
    51. "length": 264906,
    52. "recording": {
    53. "id": "cd17be88-1fb4-4eeb-9ce0-8bc701f59f84",
    54. "title": "Loser",
    55. "video": false,
    56. "length": 264906,
    57. "disambiguation": "",
    58. "first-release-date": "2000-02-08"
    59. },
    60. "id": "8c28c3d9-8a65-32d2-87eb-cdea81e5d87d",
    61. "number": "2"
    62. },
    63. {
    64. "recording": {
    65. "video": false,
    66. "title": "Duck and Run",
    67. "id": "2f18e47e-c73a-4b01-a747-10709f3f2368",
    68. "first-release-date": "2000-02-08",
    69. "disambiguation": "",
    70. "length": 230666
    71. },
    72. "id": "1501daa9-be0f-38a3-82c5-642ce9ff3d96",
    73. "number": "3",
    74. "title": "Duck and Run",
    75. "position": 3,
    76. "length": 230666
    77. },
    78. {
    79. "recording": {
    80. "disambiguation": "",
    81. "length": 194026,
    82. "first-release-date": "2000-02-08",
    83. "id": "8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8",
    84. "title": "Not Enough",
    85. "video": false
    86. },
    87. "id": "ce7fb2d3-d10d-3ac6-b8d1-2d9a44b5a9be",
    88. "number": "4",
    89. "title": "Not Enough",
    90. "position": 4,
    91. "length": 194026
    92. },
    93. {
    94. "length": 265906,
    95. "position": 5,
    96. "title": "Be Like That",
    97. "number": "5",
    98. "recording": {
    99. "id": "1e7a3b6f-c3a4-458e-a962-f1e7de2babc6",
    100. "title": "Be Like That",
    101. "video": false,
    102. "length": 265906,
    103. "disambiguation": "",
    104. "first-release-date": "2000-02-08"
    105. },
    106. "id": "092746d8-b763-3d7b-8570-dc86bbe31779"
    107. },
    108. {
    109. "length": 238466,
    110. "position": 6,
    111. "title": "Life of My Own",
    112. "number": "6",
    113. "id": "4fafc39b-5814-318d-828a-61fb2fe40bec",
    114. "recording": {
    115. "title": "Life of My Own",
    116. "video": false,
    117. "id": "eb21b7f9-45d1-4aea-b4b1-2fe48fe93551",
    118. "first-release-date": "2000-02-08",
    119. "length": 238466,
    120. "disambiguation": ""
    121. }
    122. },
    123. {
    124. "number": "7",
    125. "recording": {
    126. "first-release-date": "2000-02-08",
    127. "disambiguation": "",
    128. "length": 187733,
    129. "video": false,
    130. "title": "The Better Life",
    131. "id": "7e14e524-409d-4bef-8498-8f9a93a4470a"
    132. },
    133. "id": "dd147282-6dc7-3654-a6c2-54e66e60341e",
    134. "length": 187733,
    135. "position": 7,
    136. "title": "Better Life"
    137. },
    138. {
    139. "title": "Down Poison",
    140. "position": 8,
    141. "length": 261959,
    142. "recording": {
    143. "video": false,
    144. "title": "Down Poison",
    145. "id": "daa90b33-d188-4a9a-9540-4949cf11a1c8",
    146. "first-release-date": "2000-02-08",
    147. "disambiguation": "",
    148. "length": 261959
    149. },
    150. "id": "83836713-db6f-3d83-9c9e-f3295ea28817",
    151. "number": "8"
    152. },
    153. {
    154. "recording": {
    155. "id": "1fe7d77f-1b49-4802-ba6b-6a54fbe73dba",
    156. "title": "By My Side",
    157. "video": false,
    158. "disambiguation": "",
    159. "length": 196440,
    160. "first-release-date": "1997"
    161. },
    162. "id": "ee8eda7f-e3b2-3221-9309-38b7e4311a5a",
    163. "number": "9",
    164. "position": 9,
    165. "title": "By My Side",
    166. "length": 196440
    167. },
    168. {
    169. "title": "Smack",
    170. "position": 10,
    171. "length": 149893,
    172. "recording": {
    173. "title": "Smack",
    174. "video": false,
    175. "id": "c214e53b-44ce-4d30-8b1c-1163faab16c4",
    176. "first-release-date": "1997",
    177. "length": 149893,
    178. "disambiguation": ""
    179. },
    180. "id": "da112b1f-2c95-31b2-97b5-e5ef3ac2127e",
    181. "number": "10"
    182. },
    183. {
    184. "length": 227973,
    185. "title": "So I Need You",
    186. "position": 11,
    187. "number": "11",
    188. "id": "729ff684-7f9f-3197-938e-503360e9ff6e",
    189. "recording": {
    190. "first-release-date": "2000-02-08",
    191. "length": 227973,
    192. "disambiguation": "",
    193. "title": "So I Need You",
    194. "video": false,
    195. "id": "deb3bc5c-e635-46ed-9131-2c3bb71e7bd0"
    196. }
    197. }
    198. ],
    199. "title": "",
    200. "position": 1,
    201. "format-id": "9712d52a-4509-3d4b-a1a2-67c88c643e31",
    202. "track-count": 11,
    203. "format": "CD",
    204. "track-offset": 0
    205. }
    206. ],
    207. "release-events": [
    208. {
    209. "area": {
    210. "type": null,
    211. "name": "United States",
    212. "sort-name": "United States",
    213. "id": "489ce91b-6658-3307-9877-795b68554c98",
    214. "disambiguation": "",
    215. "iso-3166-1-codes": [
    216. "US"
    217. ],
    218. "type-id": null
    219. },
    220. "date": "2000-02-08"
    221. }
    222. ],
    223. "id": "717b5af5-3552-450e-8505-732872c2fe32"
    224. }
    225. """;
    226. public static void Main() {
    227. Console.WriteLine("Parsing JSON...");
    228. var timeStart = DateTime.Now;
    229. var jsonObj = MusicBrainz.FromJson(TestJson);
    230. var timeEnd = DateTime.Now;
    231. Console.WriteLine($"JSON parsing took { (timeEnd - timeStart).TotalMilliseconds }ms");
    232. ReadProperties(jsonObj);
    233. }
    234. static void ReadProperties(object? obj, int indentationLevel = 0) {
    235. if (obj is null) { return; }
    236. char[] indent = new char[indentationLevel];
    237. for (int i = 0; i < indentationLevel; i++) {
    238. indent[i] = ' ';
    239. }
    240. foreach (var property in obj.GetType().GetProperties().Where(prop => prop.GetAccessors().Any(methodInfo => methodInfo.IsPublic))) {
    241. Console.WriteLine($"{ indent }===> Reading property { property.Name } of { obj.GetType().Name }. Value is { property.GetValue(obj) ?? "{Got null value!}" }");
    242. if (property.GetType() is object) {
    243. try {
    244. ReadProperties(property.GetValue(obj), indentationLevel + 2);
    245. } catch (Exception ex) {
    246. Console.WriteLine($"{ indent } Failed to read properties! Error: { ex }");
    247. }
    248. }
    249. Console.WriteLine();
    250. }
    251. }
    252. }
    253. }



    Der Code oben ist lange nicht fertig, hab ja vorhin aufgehört.
    Ansonsten habe ich 1:1 den von QuickType generierten Code in eine Datei kopiert und das ausgeführt mit ​dotnet build && ./bin/Debug/net8.0/dotnet_test
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Edit:
    Okay jetzt bin ich auch dahintergekommen: Das letzte der Releases im Code unten enthält als DateObject ein Nothing. Vielleicht liegt der Fehler also in deren Datenbank?Wie würdest du das wasserdicht machen? Ein Try-Catch-Block?

    ____________________________________________

    siycah schrieb:

    und das ausgeführt mit dotnet build && ./bin/Debug/net8.0/dotnet_test

    Vielleicht liegts daran, dass ich Framework 4.8 benutze??

    siycah schrieb:

    Aber ich konnte dein JSON auch probemlos parsen. Da gab's keine Exceptions.


    Was mir grade noch auffällt, was höchst merkwürdig ist, dass er mir ja schon lange meine Tracknummern und Tracknamen ausgibt, d.h. er müsste ja eigentlich fertig deserialisiert haben, dann aber erst wenn alles fertig ausgegeben ist, dieser DateTime-Fehler kommt. Das sieht so aus:


    VB.NET-Quellcode

    1. For Each Release In AlbumObject.Releases
    2. Console.WriteLine(Release.Id.ToString & ":")
    3. Dim AlbumSearchContentURL As String = "https://musicbrainz.org/ws/2/release/" & Release.Id.ToString & "?inc=recordings&fmt=json"
    4. Console.WriteLine(AlbumSearchContentURL)
    5. Threading.Thread.Sleep(3000) 'hier noch sinnvolle zeitspanne eintragen
    6. Client = New WebClient
    7. Client.Headers.Add("User-Agent", "XXXXX")
    8. Dim ResultAlbumContentSearch As String = Client.DownloadString(AlbumSearchContentURL)
    9. Dim AlbumContentObject As AlbumSearchContentData.Welcome = AlbumSearchContentData.Welcome.FromJson(ResultAlbumContentSearch)
    10. If AlbumContentObject.Media(0).Tracks.Count = BassCd.BASS_CD_GetTracks(0) Then 'hier Laufwerkindex als Argument!!!!
    11. For Each item In AlbumContentObject.Media(0).Tracks
    12. Console.WriteLine(item.Position & ". " & item.Title)
    13. Next
    14. End If
    15. Next
    16. Console.WriteLine("Fertig!")
    17. Console.ReadLine()

    kafffee schrieb:

    Das sieht so aus:

    Könntest du deinen Beitrag nochmal bearbeiten und die Zeile markieren, wo genau die Exception geworfen wird?

    EDIT:
    Völlig überlesen. Sorry.

    kafffee schrieb:

    Vielleicht liegts daran, dass ich Framework 4.8 benutze??

    Wage ich zu bezweifeln. Aber generell sollte man eigentlich auf die neueren Frameworks setzen.

    kafffee schrieb:

    Ein Try-Catch-Block?

    Wäre zumindest ein Anfang, ja. Da solltest du nur schauen, dass du dann nicht die komplette Deserialisierung abbrichst.


    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Okay ich könnte ja einfach schauen, ob der DateObject-Wert Nothing ist.

    Aber ist glaube ich eine schlechte Idee, falls andere Werte auch irgendwann mal was ungültiges enthalten.

    Was hältst du davon, wenn ich nach dem Catch ein Continue For einfüge?

    Oder wie ignoriert man sowas am besten?

    Wir hatten ja vorher was mit diesem Nullable und Fragezeichen, kann man damit vielleicht was drehen?

    kafffee schrieb:

    Was hältst du davon, wenn ich nach dem Catch ein Continue For einfüge?


    Das könnte eine Maßnahme sein, ja. Probier man etwas herum und wenn du gar nicht weiterkommst, sag Bescheid :)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Hi + rutsch!

    ich hab auch mal probiert, und ich konnte beide Json-Texte fast problemlos deserialisieren - also dieses Root-Dingens, und das Welcome.
    Den Fehler kannich natürlich nicht reproduzieren, weil der durchs gegebene Welcome-Json wohl nicht ausgelöst wird.
    Und um die fehlerhaften Welcomes selbst abzurufen fehlen mir natürlich die Credentials.
    Also Fehler reproduzieren könnte man, wenn du den fehlerhaften JsonCode auch einstellen würdest.
    Übrigens vorzugsweise in einem CodeBlock, dann bietet das Forum eine bequemere Möglichkeit, auszukopieren.
    (Und den CodeBlock natürlich in einen Expander, sonst kriegt man ja einen Fimmel.)
    @ErfinderDesRades
    Guten Rutsch nachträglich dir auch :thumbsup:

    ErfinderDesRades schrieb:

    ich hab auch mal probiert, und ich konnte beide Json-Texte fast problemlos deserialisieren


    Was heisst "fast"? Hast du das mit json2csharp.com/ oder mit quicktype.io/ gemacht, also die Datenklassen erstellen? Also bei mir hat bloss Letzteres funktioniert... hat wies aussieht auch ein paar mehr Features(zusätzliche Methoden und hält sich an die Namenskonventionen).

    ErfinderDesRades schrieb:

    Den Fehler kannich natürlich nicht reproduzieren, weil der durchs gegebene Welcome-Json wohl nicht ausgelöst wird.


    Ja ich denke, dass das so verschachtelt ist, dass man mit der Welcome-Klasse einsteigen muss...

    Das letzte Problem war ja, dass irgendeine DateTime(Offset)-Property einen Fehler ausgelöst hat, wegen falschem Format. Bis ich dann auf die glorreiche Idee gekommen bin, mir das JSON mal genauer anzuschauen und rausgefunden hab, dass da wohl bei einem Release-Objekt ein Nothing-Wert drin war. Das hat zuerst funktioniert und dann nicht, weil das Programm für jedes Release einen neue Query macht.

    Das ist der JSON:

    Spoiler anzeigen

    Quellcode

    1. {"offset-count":11,"sectors":184035,"releases":[{"media":[{"track-count":11,"title":"","format":"CD","position":1,"discs":[{"offset-count":11,"sectors":184035,"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-"},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offset-count":11,"sectors":184035},{"offset-count":11,"sectors":184062,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980]},{"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","sectors":185735,"offset-count":11},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","sectors":184185,"offset-count":11}],"track-offset":0,"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31","tracks":[{"number":"1","length":233826,"id":"80b869b5-0982-3bde-bfd4-6481553822da","position":1,"title":"Kryptonite","recording":{"title":"Kryptonite","video":false,"disambiguation":"","id":"f5f6068d-b660-4be3-a8aa-81c55c16d687","first-release-date":"1997","length":234466}},{"id":"8c28c3d9-8a65-32d2-87eb-cdea81e5d87d","number":"2","length":264906,"recording":{"video":false,"title":"Loser","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84","disambiguation":"","first-release-date":"2000-02-08","length":264906},"position":2,"title":"Loser"},{"position":3,"title":"Duck and Run","recording":{"first-release-date":"2000-02-08","length":230666,"title":"Duck and Run","video":false,"disambiguation":"","id":"2f18e47e-c73a-4b01-a747-10709f3f2368"},"number":"3","length":230666,"id":"1501daa9-be0f-38a3-82c5-642ce9ff3d96"},{"length":194026,"number":"4","id":"ce7fb2d3-d10d-3ac6-b8d1-2d9a44b5a9be","title":"Not Enough","position":4,"recording":{"first-release-date":"2000-02-08","length":194026,"video":false,"title":"Not Enough","id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8","disambiguation":""}},{"recording":{"length":265906,"first-release-date":"2000-02-08","disambiguation":"","id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6","title":"Be Like That","video":false},"title":"Be Like That","position":5,"id":"092746d8-b763-3d7b-8570-dc86bbe31779","number":"5","length":265906},{"position":6,"title":"Life of My Own","recording":{"video":false,"title":"Life of My Own","disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551","first-release-date":"2000-02-08","length":238466},"number":"6","length":238466,"id":"4fafc39b-5814-318d-828a-61fb2fe40bec"},{"id":"dd147282-6dc7-3654-a6c2-54e66e60341e","length":187733,"number":"7","recording":{"title":"The Better Life","video":false,"disambiguation":"","id":"7e14e524-409d-4bef-8498-8f9a93a4470a","first-release-date":"2000-02-08","length":187733},"position":7,"title":"Better Life"},{"recording":{"title":"Down Poison","video":false,"disambiguation":"","id":"daa90b33-d188-4a9a-9540-4949cf11a1c8","first-release-date":"2000-02-08","length":261959},"title":"Down Poison","position":8,"id":"83836713-db6f-3d83-9c9e-f3295ea28817","number":"8","length":261959},{"position":9,"title":"By My Side","recording":{"title":"By My Side","video":false,"disambiguation":"","id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","first-release-date":"1997","length":196440},"length":196440,"number":"9","id":"ee8eda7f-e3b2-3221-9309-38b7e4311a5a"},{"number":"10","length":149893,"id":"da112b1f-2c95-31b2-97b5-e5ef3ac2127e","position":10,"title":"Smack","recording":{"first-release-date":"1997","length":149893,"video":false,"title":"Smack","id":"c214e53b-44ce-4d30-8b1c-1163faab16c4","disambiguation":""}},{"position":11,"title":"So I Need You","recording":{"first-release-date":"2000-02-08","length":227973,"video":false,"title":"So I Need You","id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0","disambiguation":""},"number":"11","length":227973,"id":"729ff684-7f9f-3197-938e-503360e9ff6e"}]}],"id":"717b5af5-3552-450e-8505-732872c2fe32","barcode":"601215392029","asin":"B00004C4QQ","packaging":"Jewel Case","title":"The Better Life","text-representation":{"script":"Latn","language":"eng"},"status":"Official","country":"US","release-events":[{"date":"2000-02-08","area":{"iso-3166-1-codes":["US"],"type":null,"id":"489ce91b-6658-3307-9877-795b68554c98","disambiguation":"","name":"United States","type-id":null,"sort-name":"United States"}}],"disambiguation":"","cover-art-archive":{"darkened":false,"back":true,"artwork":true,"front":true,"count":5},"status-id":"4e304316-386d-3409-af2e-78857eec5cfe","quality":"normal","packaging-id":"ec27701a-4a22-37f4-bfac-6616e0f9750a","date":"2000-02-08"},{"barcode":"601215392029","asin":"B00004C4QQ","media":[{"tracks":[{"number":"1","length":233826,"id":"57c5f59f-9569-3752-81a5-7e1147b28afe","position":1,"title":"Kryptonite","recording":{"video":false,"title":"Kryptonite","id":"f5f6068d-b660-4be3-a8aa-81c55c16d687","disambiguation":"","first-release-date":"1997","length":234466}},{"id":"60ed6ba9-e662-3b58-a52d-0d84dc74c79a","number":"2","length":264906,"recording":{"length":264906,"first-release-date":"2000-02-08","disambiguation":"","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84","video":false,"title":"Loser"},"title":"Loser","position":2},{"position":3,"title":"Duck and Run","recording":{"title":"Duck and Run","video":false,"disambiguation":"","id":"2f18e47e-c73a-4b01-a747-10709f3f2368","first-release-date":"2000-02-08","length":230666},"length":230666,"number":"3","id":"dce82878-08b8-3ada-8ad5-e3239fe7a4dc"},{"title":"Not Enough","position":4,"recording":{"title":"Not Enough","video":false,"id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8","disambiguation":"","first-release-date":"2000-02-08","length":194026},"number":"4","length":194026,"id":"01c1cc6c-8c93-3956-8492-cbe9ff396e46"},{"recording":{"length":265906,"first-release-date":"2000-02-08","disambiguation":"","id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6","video":false,"title":"Be Like That"},"title":"Be Like That","position":5,"id":"d68f797e-452d-3e64-a43d-9c8571294a59","length":265906,"number":"5"},{"position":6,"title":"Life of My Own","recording":{"first-release-date":"2000-02-08","length":238466,"title":"Life of My Own","video":false,"disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551"},"number":"6","length":238466,"id":"1bd7ed48-72e0-3adb-b5b4-3b79fa78a532"},{"number":"7","length":187733,"id":"aa22990f-4264-33dd-b368-a4a9fb505be4","position":7,"title":"The Better Life","recording":{"first-release-date":"2000-02-08","length":187733,"video":false,"title":"The Better Life","disambiguation":"","id":"7e14e524-409d-4bef-8498-8f9a93a4470a"}},{"position":8,"title":"Down Poison","recording":{"title":"Down Poison","video":false,"id":"daa90b33-d188-4a9a-9540-4949cf11a1c8","disambiguation":"","first-release-date":"2000-02-08","length":261959},"number":"8","length":261959,"id":"d146dba6-7b5b-3a5d-b16d-730a355156a8"},{"recording":{"video":false,"title":"By My Side","disambiguation":"","id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","first-release-date":"1997","length":196440},"title":"By My Side","position":9,"id":"3227733f-8d6b-3d75-8dc1-d4d107265b76","number":"9","length":196440},{"position":10,"title":"Smack","recording":{"first-release-date":"1997","length":149893,"title":"Smack","video":false,"id":"c214e53b-44ce-4d30-8b1c-1163faab16c4","disambiguation":""},"number":"10","length":149893,"id":"4a4bd435-e610-3065-a343-2c9b2f6952cf"},{"id":"97f33b0a-9b7d-3934-b499-2f9d40b9bc0b","number":"11","length":227973,"recording":{"first-release-date":"2000-02-08","length":227973,"video":false,"title":"So I Need You","disambiguation":"","id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0"},"title":"So I Need You","position":11}],"track-offset":0,"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31","format":"CD","title":"","position":1,"track-count":11,"discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offset-count":11,"sectors":184035},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offset-count":11,"sectors":184035},{"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980],"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offset-count":11,"sectors":184062},{"sectors":185735,"offset-count":11,"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-"},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offset-count":11,"sectors":184185}]}],"id":"39797c0e-b623-3d75-be9d-91791f660308","cover-art-archive":{"back":false,"darkened":false,"artwork":true,"front":true,"count":1},"status-id":"4e304316-386d-3409-af2e-78857eec5cfe","quality":"normal","date":"2000-09-18","packaging-id":null,"packaging":null,"title":"The Better Life","status":"Official","text-representation":{"script":"Latn","language":"eng"},"country":"GB","release-events":[{"area":{"iso-3166-1-codes":["GB"],"type-id":null,"name":"United Kingdom","type":null,"id":"8a754a16-0027-3a29-b6d7-2b40ea0481ed","disambiguation":"","sort-name":"United Kingdom"},"date":"2000-09-18"}],"disambiguation":""},{"disambiguation":"","packaging":"Jewel Case","title":"The Better Life","text-representation":{"script":"Latn","language":"eng"},"status":"Official","country":"DE","release-events":[{"area":{"iso-3166-1-codes":["DE"],"sort-name":"Germany","id":"85752fda-13c4-31a3-bee5-0e5cb1f51dad","type":null,"disambiguation":"","name":"Germany","type-id":null},"date":"2000-09-11"}],"cover-art-archive":{"front":true,"count":3,"darkened":false,"back":true,"artwork":true},"quality":"normal","status-id":"4e304316-386d-3409-af2e-78857eec5cfe","date":"2000-09-11","packaging-id":"ec27701a-4a22-37f4-bfac-6616e0f9750a","media":[{"discs":[{"sectors":184035,"offset-count":11,"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-"},{"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"offset-count":11,"sectors":184035},{"offset-count":11,"sectors":184062,"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980],"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-"},{"sectors":185735,"offset-count":11,"offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-"},{"sectors":184185,"offset-count":11,"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offset-count":11,"sectors":185577,"id":"wciuJa_ZuiT4STtw.ej0TTA0w4Y-","offsets":[150,17850,37863,55312,70023,90119,108153,122391,142191,157077,168476]}],"title":"","format":"CD","position":1,"track-count":11,"tracks":[{"id":"777e4bdc-746d-342f-b1b2-7d7ce3bde7aa","number":"1","length":233826,"recording":{"title":"Kryptonite","video":false,"disambiguation":"","id":"f5f6068d-b660-4be3-a8aa-81c55c16d687","first-release-date":"1997","length":234466},"title":"Kryptonite","position":1},{"id":"2a5f7ea5-8958-3eae-88d1-846bed76cd48","length":264906,"number":"2","recording":{"length":264906,"first-release-date":"2000-02-08","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84","disambiguation":"","video":false,"title":"Loser"},"title":"Loser","position":2},{"recording":{"first-release-date":"2000-02-08","length":230666,"title":"Duck and Run","video":false,"disambiguation":"","id":"2f18e47e-c73a-4b01-a747-10709f3f2368"},"position":3,"title":"Duck and Run","id":"e29cf797-e5a0-3d35-8806-bed74508929d","length":230666,"number":"3"},{"position":4,"title":"Not Enough","recording":{"length":194026,"first-release-date":"2000-02-08","disambiguation":"","id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8","title":"Not Enough","video":false},"length":194026,"number":"4","id":"eeb95274-7d12-326c-97a4-e6b2d4d4d1e2"},{"id":"d62fa231-974a-38e6-bfe0-5e2f821d9f14","length":265906,"number":"5","recording":{"id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6","disambiguation":"","video":false,"title":"Be Like That","length":265906,"first-release-date":"2000-02-08"},"position":5,"title":"Be Like That"},{"id":"d2e34d7e-4360-32df-92dc-cbd38e7250ea","length":238466,"number":"6","recording":{"first-release-date":"2000-02-08","length":238466,"video":false,"title":"Life of My Own","disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551"},"position":6,"title":"Life of My Own"},{"title":"Better Life","position":7,"recording":{"id":"7e14e524-409d-4bef-8498-8f9a93a4470a","disambiguation":"","video":false,"title":"The Better Life","length":187733,"first-release-date":"2000-02-08"},"number":"7","length":187733,"id":"f919d7a4-d072-3639-9cf1-8389ae169469"},{"recording":{"first-release-date":"2000-02-08","length":261959,"video":false,"title":"Down Poison","id":"daa90b33-d188-4a9a-9540-4949cf11a1c8","disambiguation":""},"position":8,"title":"Down Poison","id":"227542ba-7643-3139-80f7-9bc8a62d4162","length":261959,"number":"8"},{"id":"738a7b46-f196-3db3-ae67-dfaa985eab02","number":"9","length":196440,"recording":{"length":196440,"first-release-date":"1997","disambiguation":"","id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","video":false,"title":"By My Side"},"position":9,"title":"By My Side"},{"number":"10","length":149893,"id":"dfe0d721-cb87-32a5-aec2-f77382141b18","title":"Smack","position":10,"recording":{"id":"c214e53b-44ce-4d30-8b1c-1163faab16c4","disambiguation":"","title":"Smack","video":false,"length":149893,"first-release-date":"1997"}},{"position":11,"title":"So I Need You","recording":{"length":227973,"first-release-date":"2000-02-08","id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0","disambiguation":"","title":"So I Need You","video":false},"length":227973,"number":"11","id":"2171bb30-4627-39de-9b18-5e79a7805224"}],"track-offset":0,"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31"}],"id":"55acdded-591e-36dd-bc40-15d5a07c0125","asin":null,"barcode":"601215392029"},{"status-id":"4e304316-386d-3409-af2e-78857eec5cfe","quality":"normal","date":"2000-06-28","packaging-id":null,"cover-art-archive":{"count":1,"front":true,"artwork":true,"back":false,"darkened":false},"country":"JP","release-events":[{"area":{"sort-name":"Japan","type":null,"id":"2db42837-c832-3c27-b4a3-08198f75693c","name":"Japan","disambiguation":"","type-id":null,"iso-3166-1-codes":["JP"]},"date":"2000-06-28"}],"packaging":null,"title":"The Better Life","text-representation":{"language":"eng","script":"Latn"},"status":"Official","disambiguation":"","barcode":"4988067044556","asin":"B00005GT8I","id":"6e10b5fe-6d8a-3503-957c-9162969c9b73","media":[{"track-count":11,"position":1,"format":"CD","title":"","discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offset-count":11,"sectors":184035},{"sectors":184035,"offset-count":11,"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937]},{"offset-count":11,"sectors":184062,"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-","offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980]},{"sectors":185735,"offset-count":11,"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489]},{"id":"W8QmtEGl._hSOIBChZl14mTAsa0-","offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"offset-count":11,"sectors":184185}],"track-offset":0,"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31","tracks":[{"position":1,"title":"Kryptonite","recording":{"id":"f5f6068d-b660-4be3-a8aa-81c55c16d687","disambiguation":"","video":false,"title":"Kryptonite","length":234466,"first-release-date":"1997"},"number":"1","length":233826,"id":"870d7eb6-d56c-3e5d-b624-6702d1fbac0b"},{"title":"Loser","position":2,"recording":{"first-release-date":"2000-02-08","length":264906,"video":false,"title":"Loser","disambiguation":"","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84"},"length":264906,"number":"2","id":"629a22d0-35fe-3c96-b0e8-532be338812c"},{"recording":{"first-release-date":"2000-02-08","length":230666,"video":false,"title":"Duck and Run","id":"2f18e47e-c73a-4b01-a747-10709f3f2368","disambiguation":""},"position":3,"title":"Duck and Run","id":"ac029051-eb0e-3c6b-9e7a-c2f4d0447c0e","number":"3","length":230666},{"title":"Not Enough","position":4,"recording":{"length":194026,"first-release-date":"2000-02-08","disambiguation":"","id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8","video":false,"title":"Not Enough"},"number":"4","length":194026,"id":"9d4aaae2-7441-3749-9469-d698a5499976"},{"id":"b329bc8b-7b5b-323b-be0d-a9aaae35c550","length":265906,"number":"5","recording":{"length":265906,"first-release-date":"2000-02-08","id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6","disambiguation":"","title":"Be Like That","video":false},"position":5,"title":"Be Like That"},{"length":238466,"number":"6","id":"916225b7-72f4-3199-a58f-705d6f50910e","position":6,"title":"Life of My Own","recording":{"disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551","title":"Life of My Own","video":false,"length":238466,"first-release-date":"2000-02-08"}},{"title":"The Better Life","position":7,"recording":{"length":187733,"first-release-date":"2000-02-08","id":"7e14e524-409d-4bef-8498-8f9a93a4470a","disambiguation":"","video":false,"title":"The Better Life"},"number":"7","length":187733,"id":"d61c7c97-21ef-37c6-9bdd-fadde3cbb4d4"},{"recording":{"length":261959,"first-release-date":"2000-02-08","disambiguation":"","id":"daa90b33-d188-4a9a-9540-4949cf11a1c8","video":false,"title":"Down Poison"},"position":8,"title":"Down Poison","id":"222fc721-7fca-3fee-8426-10ae16af9cd9","number":"8","length":261959},{"length":196440,"number":"9","id":"89ba82be-d925-3961-8d04-e8d1f7f9a8d8","title":"By My Side","position":9,"recording":{"id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","disambiguation":"","title":"By My Side","video":false,"length":196440,"first-release-date":"1997"}},{"recording":{"first-release-date":"1997","length":149893,"video":false,"title":"Smack","disambiguation":"","id":"c214e53b-44ce-4d30-8b1c-1163faab16c4"},"position":10,"title":"Smack","id":"e601b6dc-ad16-3563-9735-bdc569aab072","length":149893,"number":"10"},{"position":11,"title":"So I Need You","recording":{"title":"So I Need You","video":false,"id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0","disambiguation":"","first-release-date":"2000-02-08","length":227973},"length":227973,"number":"11","id":"405536c6-29ff-369e-8aa0-334bf98c2704"}]}]},{"disambiguation":"Bonus Disc Edition","packaging":null,"title":"The Better Life","text-representation":{"script":"Latn","language":"eng"},"status":"Official","country":"XE","release-events":[{"area":{"iso-3166-1-codes":["XE"],"type-id":null,"id":"89a675c2-3e37-3518-b83c-418bad59a85a","type":null,"disambiguation":"","name":"Europe","sort-name":"Europe"},"date":"2001-06-13"}],"cover-art-archive":{"count":1,"front":true,"artwork":true,"back":false,"darkened":false},"quality":"normal","status-id":"4e304316-386d-3409-af2e-78857eec5cfe","date":"2001-06-13","packaging-id":null,"media":[{"track-offset":0,"tracks":[{"position":1,"title":"Kryptonite","recording":{"first-release-date":"1997","length":234466,"title":"Kryptonite","video":false,"disambiguation":"","id":"f5f6068d-b660-4be3-a8aa-81c55c16d687"},"length":233826,"number":"1","id":"14c3d0a1-3db7-3ac2-a326-016d8056ed4f"},{"id":"85f94a9a-e912-3e8e-914e-9c05dc918906","length":264906,"number":"2","recording":{"video":false,"title":"Loser","disambiguation":"","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84","first-release-date":"2000-02-08","length":264906},"position":2,"title":"Loser"},{"number":"3","length":230666,"id":"f7575268-b632-365a-8596-67453dae4943","title":"Duck and Run","position":3,"recording":{"disambiguation":"","id":"2f18e47e-c73a-4b01-a747-10709f3f2368","title":"Duck and Run","video":false,"length":230666,"first-release-date":"2000-02-08"}},{"length":194026,"number":"4","id":"0f7712cf-3625-3108-93ac-a510b4c569b5","position":4,"title":"Not Enough","recording":{"first-release-date":"2000-02-08","length":194026,"video":false,"title":"Not Enough","disambiguation":"","id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8"}},{"id":"5b522ce3-3928-34cf-ae13-53a808caec54","length":265906,"number":"5","recording":{"first-release-date":"2000-02-08","length":265906,"title":"Be Like That","video":false,"disambiguation":"","id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6"},"title":"Be Like That","position":5},{"length":238466,"number":"6","id":"cbf39543-7213-3a91-aec7-29e89462e53b","position":6,"title":"Life of My Own","recording":{"first-release-date":"2000-02-08","length":238466,"title":"Life of My Own","video":false,"disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551"}},{"position":7,"title":"The Better Life","recording":{"video":false,"title":"The Better Life","disambiguation":"","id":"7e14e524-409d-4bef-8498-8f9a93a4470a","first-release-date":"2000-02-08","length":187733},"length":187733,"number":"7","id":"acb4d191-3ca9-3faa-b0ba-f03fea0252bb"},{"length":261959,"number":"8","id":"74eefff7-5286-3295-95be-889c247c4f4a","title":"Down Poison","position":8,"recording":{"video":false,"title":"Down Poison","disambiguation":"","id":"daa90b33-d188-4a9a-9540-4949cf11a1c8","first-release-date":"2000-02-08","length":261959}},{"recording":{"video":false,"title":"By My Side","disambiguation":"","id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","first-release-date":"1997","length":196440},"title":"By My Side","position":9,"id":"25768808-ca75-3e07-a383-fe190f84d457","length":196440,"number":"9"},{"length":149893,"number":"10","id":"3f0dda46-0c14-39fb-aa16-1ff36262fa60","position":10,"title":"Smack","recording":{"video":false,"title":"Smack","disambiguation":"","id":"c214e53b-44ce-4d30-8b1c-1163faab16c4","first-release-date":"1997","length":149893}},{"id":"0a68244f-c3cb-32cf-8229-351ccd9af986","number":"11","length":227973,"recording":{"disambiguation":"","id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0","video":false,"title":"So I Need You","length":227973,"first-release-date":"2000-02-08"},"title":"So I Need You","position":11}],"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31","format":"CD","title":"","position":1,"track-count":11,"discs":[{"sectors":184035,"offset-count":11,"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-"},{"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"CAzJSPfiE1bxRnDNI0iQwqfl_LY-","sectors":184035,"offset-count":11},{"offset-count":11,"sectors":184062,"offsets":[182,17727,37602,54882,69440,89382,107277,121357,140995,155737,166980],"id":"HSyom1OwaP3oIHbrMyOxuxyidJg-"},{"id":"OBtxgocnAwKpDKkjPmZZTknn7oE-","offsets":[150,17905,37921,55370,70070,90160,108193,122421,142217,157098,168489],"offset-count":11,"sectors":185735},{"offset-count":11,"sectors":184185,"offsets":[150,17687,37555,54855,69407,89350,107235,121315,140962,155695,166937],"id":"W8QmtEGl._hSOIBChZl14mTAsa0-"}]},{"discs":[{"sectors":92060,"offset-count":5,"id":"tVNbsuVZyiciUmaWoEIQwJFf7Zo-","offsets":[150,23225,40820,54902,72100]}],"title":"Bonus Disc","format":"Enhanced CD","position":2,"track-count":5,"data-tracks":[{"recording":{"disambiguation":"","id":"ab1cf247-7582-4120-9452-29e9ce4399d7","title":"Loser","video":true,"length":261000,"first-release-date":"2001-06-13"},"position":6,"title":"Loser (enhanced video)","id":"609e9e9c-5ccd-472b-9ae7-b5f5872f5b2c","number":"6","length":261000},{"title":"Duck and Run (enhanced video)","position":7,"recording":{"id":"0adf49e4-b19e-427a-b5e7-d6eb97c11dd3","disambiguation":"","title":"Duck and Run","video":true,"length":234000,"first-release-date":"2001-06-13"},"length":234000,"number":"7","id":"40cf6871-ef24-4f3d-983c-c09fe00fe81e"}],"format-id":"8a08dc62-1aa2-34de-a904-fa467c53052c","track-offset":0,"tracks":[{"recording":{"length":307666,"first-release-date":"2001-06-13","id":"ccc5b790-9a6b-420f-bbfa-a20d88e16ac4","disambiguation":"","title":"Loser (live)","video":false},"title":"Loser (live)","position":1,"id":"ba58bef0-b2a6-3efe-b997-9403af1457dd","number":"1","length":307666},{"title":"Duck and Run (live)","position":2,"recording":{"length":234600,"first-release-date":"2001-06-13","disambiguation":"","id":"68539aa9-d73a-4c85-afc8-2262162bdbb1","video":false,"title":"Duck and Run (live)"},"length":234600,"number":"2","id":"6fc6784c-7345-347d-b55a-9c7525cd732a"},{"id":"de55373e-00fc-3ce1-82ae-886e55a0f1ee","number":"3","length":187760,"recording":{"first-release-date":"2001-06-13","length":187760,"title":"Not Enough (live)","video":false,"id":"b11c0b41-a129-442b-b6af-693ca735734a","disambiguation":""},"title":"Not Enough (live)","position":3},{"recording":{"first-release-date":"2001-06-13","length":227000,"title":"By My Side","video":false,"disambiguation":"live","id":"51bd90ba-2024-403c-95ef-218c26862fdf"},"position":4,"title":"By My Side (live)","id":"c4d5a958-2ca1-3add-a7de-740f8969bb5c","number":"4","length":229306},{"id":"07b8f381-a175-37db-8b05-1a0a4ba4eeb8","number":"5","length":266133,"recording":{"disambiguation":"","id":"955de04c-f54c-4184-b886-c9d2a4eb4dd5","title":"Be Like That (acoustic)","video":false,"length":266000,"first-release-date":"2001-06-13"},"position":5,"title":"Be Like That (acoustic)"}]}],"id":"48bb1fd9-a45c-3fc6-aca7-075d1ef08f5c","asin":null,"barcode":"044001445422"},{"release-events":[{"area":{"type":null,"disambiguation":"","id":"71bbafaa-e825-3e15-8ca9-017dcad1748b","name":"Canada","type-id":null,"sort-name":"Canada","iso-3166-1-codes":["CA"]},"date":"2000"}],"country":"CA","status":"Official","text-representation":{"script":"Latn","language":"eng"},"title":"The Better Life","packaging":"Jewel Case","disambiguation":"","date":"2000","packaging-id":"ec27701a-4a22-37f4-bfac-6616e0f9750a","status-id":"4e304316-386d-3409-af2e-78857eec5cfe","quality":"normal","cover-art-archive":{"artwork":true,"darkened":false,"back":true,"count":2,"front":true},"id":"234bbb67-dc25-4114-90cc-b0a7fdc47fa0","media":[{"format-id":"9712d52a-4509-3d4b-a1a2-67c88c643e31","track-offset":0,"tracks":[{"id":"f93f1d60-3224-49e2-be26-4ac2226346bf","number":"1","length":233826,"recording":{"video":false,"title":"Kryptonite","id":"f5f6068d-b660-4be3-a8aa-81c55c16d687","disambiguation":"","first-release-date":"1997","length":234466},"title":"Kryptonite","position":1},{"length":264906,"number":"2","id":"fb6f7fb5-6c10-4888-a801-0d876c91d28e","title":"Loser","position":2,"recording":{"title":"Loser","video":false,"disambiguation":"","id":"cd17be88-1fb4-4eeb-9ce0-8bc701f59f84","first-release-date":"2000-02-08","length":264906}},{"recording":{"video":false,"title":"Duck and Run","id":"2f18e47e-c73a-4b01-a747-10709f3f2368","disambiguation":"","first-release-date":"2000-02-08","length":230666},"position":3,"title":"Duck and Run","id":"fc421baa-e600-4c17-9358-c051193ca5e3","number":"3","length":230666},{"position":4,"title":"Not Enough","recording":{"title":"Not Enough","video":false,"id":"8dad9e5c-614e-4d03-ae5c-2eb3a5ae72c8","disambiguation":"","first-release-date":"2000-02-08","length":194026},"length":194026,"number":"4","id":"43bac4a7-da59-480b-ba32-479fdfb013c2"},{"recording":{"length":265906,"first-release-date":"2000-02-08","disambiguation":"","id":"1e7a3b6f-c3a4-458e-a962-f1e7de2babc6","video":false,"title":"Be Like That"},"position":5,"title":"Be Like That","id":"03fee5d2-6712-4e36-b5eb-06c412a2b361","length":265906,"number":"5"},{"id":"3d97524a-0b1c-4c50-83cb-ad75228e18b8","number":"6","length":238466,"recording":{"disambiguation":"","id":"eb21b7f9-45d1-4aea-b4b1-2fe48fe93551","video":false,"title":"Life of My Own","length":238466,"first-release-date":"2000-02-08"},"position":6,"title":"Life of My Own"},{"recording":{"length":187733,"first-release-date":"2000-02-08","disambiguation":"","id":"7e14e524-409d-4bef-8498-8f9a93a4470a","title":"The Better Life","video":false},"position":7,"title":"Better Life","id":"6699ec41-f623-4a41-aeda-5529a9f2b3ba","number":"7","length":187733},{"position":8,"title":"Down Poison","recording":{"first-release-date":"2000-02-08","length":261959,"title":"Down Poison","video":false,"disambiguation":"","id":"daa90b33-d188-4a9a-9540-4949cf11a1c8"},"number":"8","length":261959,"id":"c90a845c-1cb1-4e7c-ab9b-3867b79796aa"},{"number":"9","length":196440,"id":"99990193-1c1b-4431-a3b7-54939442e4d6","position":9,"title":"By My Side","recording":{"length":196440,"first-release-date":"1997","disambiguation":"","id":"1fe7d77f-1b49-4802-ba6b-6a54fbe73dba","title":"By My Side","video":false}},{"position":10,"title":"Smack","recording":{"length":149893,"first-release-date":"1997","id":"c214e53b-44ce-4d30-8b1c-1163faab16c4","disambiguation":"","video":false,"title":"Smack"},"length":149893,"number":"10","id":"b0ba73da-a36b-4bf3-b012-9601060a8e8f"},{"id":"22962589-c516-4516-9c82-fbc04ef4561d","length":227973,"number":"11","recording":{"length":227973,"first-release-date":"2000-02-08","disambiguation":"","id":"deb3bc5c-e635-46ed-9131-2c3bb71e7bd0","title":"So I Need You","video":false},"title":"So I Need You","position":11}],"discs":[{"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-","offset-count":11,"sectors":184035}],"position":1,"format":"CD","title":"","track-count":11}],"barcode":"601215392029","asin":null}],"offsets":[150,17695,37555,54850,69407,89350,107230,121315,140962,155692,166937],"id":"2yeDPY5_bCqQjLWXRoKSw15NSNo-"}


    @siycah
    Das mit Continue For scheint zu funktionieren :) jedenfalls in diesem Fall...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()

    also ich hab einfach json2csharp genommen.
    allerdings ist das json aus post#37 strukturell ähnlich zu dem aus post#1.
    Und somit nicht zu verwechseln mit dem aus post#16.

    Die Jsons aus post#1 + post#16 würde ich mal als "ReleasesData" bezeichnen, während es sich bei post#16 ja um "AlbumSearchData" handelt.

    Jo, und nachwievor tritt bei mir kein Fehler auf. Liegt wohl daran, dass ich die generierten Datentypen nicht geändert habe, also bei mir gibt Datumse As String und sowas.



    Was mir auffällt ist, dass post#1-Json dieselben Properties anders formuliert als post#37-Json: Mal heisstes "typeid": und mal: "type-id":.
    Dassis sehr blöd, weil dadurch kann man die beiden Jsonse nicht in dieselbe Datenstruktur deserialisieren.

    Wie willst du das Problem lösen?

    ErfinderDesRades schrieb:

    also ich hab einfach json2csharp genommen.

    Hä? Echt? Mit welcher Funktion hast du das deserialisiert?

    ErfinderDesRades schrieb:

    allerdings ist das json aus post#37 strukturell ähnlich zu dem aus post#1.
    Und somit nicht zu verwechseln mit dem aus post#16.

    Ich hab zwei Sammlungen für Datenklassen. Einmal AlbumSearchData und einmal AlbumSearchContenrtData. Und demnach zwei verschiedene Querys. Aus dem Ergebnis von AlbumSearchData (aus einer Property davon) wird der Query-String der zweiten erstellt (sieht man im Code des letzten Posts jetzt nicht). An Post16-JSON hab ich rumgedoktert, an Post 37 nicht. Post 1 (AlbumSearchData) ist eine andere Datenstruktur wie die beiden andern (AlbumSearchContentData).

    ErfinderDesRades schrieb:

    Die Jsons aus post#1 + post#16 würde ich mal als "ReleasesData" bezeichnen, während es sich bei post#16 ja um "AlbumSearchData" handelt.

    Du hast da nen Tip/Denkfehler drin: du erwähnst zwei Mal dePost#16...

    ErfinderDesRades schrieb:

    Was mir auffällt ist, dass post#1-Json dieselben Properties anders formuliert als post#37-Json: Mal heisstes "typeid": und mal: "type-id":.
    Dassis sehr blöd, weil dadurch kann man die beiden Jsonse nicht in dieselbe Datenstruktur deserialisieren.

    Wie willst du das Problem lösen?

    Ja sind aber auch zwei verschiedene Querys. Ich muss also sowieso zwei Datenstrukturen nehmen. Die haben beide in vielen Fällen ähnliche oder sogar gleiche Properties. Und selbst wenn du dieselben Datebstrukturen hernimmst, haben die oft gleiche Porpertienamen, aber in verschiedenen Klassen (zB. id).

    Ich hoff ich hab bisschen Licht ins Dunkel gebracht, aber was mich wirklich interessieren würde ist, wie du deserialisiert hast mit json2csharp???

    siycah schrieb:

    kafffee schrieb:
    Okay ich denke den Code hab ich verstanden. out wäre also das Äquivalent zu ByRef in VB?


    Ja, so ist es.


    Nein so ist es nicht ganz. In VB gibt es ja kein out, nur <Out()> und <OutAttribute>. Das c# Äquivalent zu ByRef ist ref. ref und out sind zwar ähnlich, aber doch verschieden. Beim ref muss die Variable initaialisiert sein, beim out allerdings nicht. out signalisiert dem C# dev, das die Variable inenrhalb dieses Scopes initialisiert und/oder auch verändert wird, beim ref wird der Wert nur benutzt und/oder auch verändert, es findet aber keine initialisierung statt. EIn VB-Dev hat dann wohl zwar ByRef für out zu nutzen, aber dieser Unterschied zwischen out und ref sollte aber bekannt sein.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „DTF“ ()