From d393aec1f630bb171769aead83395ffa250f4482 Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 12 Jan 2024 00:48:49 +0100 Subject: [PATCH] added more enum mapping and more robust int converter --- .../BrickOwlSharp.Client.csproj | 2 +- BrickOwlSharp.Client/CatalogItem.cs | 4 ++-- ...tHandler.cs => IBrickOwlRequestHandler.cs} | 0 BrickOwlSharp.Client/IdType.cs | 11 +++++++++- .../Json/IntStringConverter.cs | 22 ++++++++++++++++--- .../Json/ItemTypeStringConverter.cs | 14 ++++++++++++ 6 files changed, 46 insertions(+), 7 deletions(-) rename BrickOwlSharp.Client/{IBricklinkRequestHandler.cs => IBrickOwlRequestHandler.cs} (100%) diff --git a/BrickOwlSharp.Client/BrickOwlSharp.Client.csproj b/BrickOwlSharp.Client/BrickOwlSharp.Client.csproj index 3a72614..64391a3 100644 --- a/BrickOwlSharp.Client/BrickOwlSharp.Client.csproj +++ b/BrickOwlSharp.Client/BrickOwlSharp.Client.csproj @@ -19,7 +19,7 @@ With BrickOwlSharp, developers can easily integrate BrickOwl into their applicat - + diff --git a/BrickOwlSharp.Client/CatalogItem.cs b/BrickOwlSharp.Client/CatalogItem.cs index 812d7fd..f3385eb 100644 --- a/BrickOwlSharp.Client/CatalogItem.cs +++ b/BrickOwlSharp.Client/CatalogItem.cs @@ -59,9 +59,9 @@ public partial class CatalogItem [JsonPropertyName("color_name")] public string ColorName { get; set; } - + [JsonPropertyName("color_id"), JsonConverter(typeof(IntStringConverter))] - public int ColorId { get; set; } + public int ColorId { get; set; } [JsonPropertyName("color_hex")] public string ColorHex { get; set; } diff --git a/BrickOwlSharp.Client/IBricklinkRequestHandler.cs b/BrickOwlSharp.Client/IBrickOwlRequestHandler.cs similarity index 100% rename from BrickOwlSharp.Client/IBricklinkRequestHandler.cs rename to BrickOwlSharp.Client/IBrickOwlRequestHandler.cs diff --git a/BrickOwlSharp.Client/IdType.cs b/BrickOwlSharp.Client/IdType.cs index 3ceb097..6fbee80 100644 --- a/BrickOwlSharp.Client/IdType.cs +++ b/BrickOwlSharp.Client/IdType.cs @@ -35,7 +35,10 @@ public enum IdType LDraw, BOID, ItemNo, - SetNumber + SetNumber, + BLItemNo, + UPC, + EAN } @@ -50,6 +53,9 @@ public static IdType FromString(this IdType _, string s) case "boid": return IdType.BOID; case "item_no": return IdType.ItemNo; case "set_number": return IdType.SetNumber; + case "bl_item_no": return IdType.BLItemNo; + case "ean": return IdType.EAN; + case "upc": return IdType.UPC; } return IdType.Unknown; @@ -65,6 +71,9 @@ public static string EnumToString(this IdType c) case IdType.BOID: return "boid"; case IdType.ItemNo: return "item_no"; case IdType.SetNumber: return "set_number"; + case IdType.BLItemNo: return "bl_item_no"; + case IdType.EAN: return "ean"; + case IdType.UPC: return "upc"; } return ""; diff --git a/BrickOwlSharp.Client/Json/IntStringConverter.cs b/BrickOwlSharp.Client/Json/IntStringConverter.cs index d047b9e..8720915 100644 --- a/BrickOwlSharp.Client/Json/IntStringConverter.cs +++ b/BrickOwlSharp.Client/Json/IntStringConverter.cs @@ -34,10 +34,26 @@ internal class IntStringConverter : JsonConverter { public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - var stringValue = reader.GetString(); - if (Int32.TryParse(stringValue, out int value)) + try { - return value; + var stringValue = reader.GetString(); + if (Int32.TryParse(stringValue, out int value)) + { + return value; + } + } + catch + { + } + + try + { + var intValue = reader.GetInt32(); + return intValue; + } + catch + { + } return default(Int32); } diff --git a/BrickOwlSharp.Client/Json/ItemTypeStringConverter.cs b/BrickOwlSharp.Client/Json/ItemTypeStringConverter.cs index cd8356c..6a3ee2d 100644 --- a/BrickOwlSharp.Client/Json/ItemTypeStringConverter.cs +++ b/BrickOwlSharp.Client/Json/ItemTypeStringConverter.cs @@ -39,6 +39,13 @@ public override ItemType Read(ref Utf8JsonReader reader, Type typeToConvert, Jso switch (stringValue) { case "Part": return ItemType.Part; + case "Minibuild": return ItemType.Minibuild; + case "Packaging": return ItemType.Packaging; + case "Set": return ItemType.Set; + case "Instructions": return ItemType.Instructions; + case "Gear": return ItemType.Gear; + case "Minifigure": return ItemType.Minifigure; + case "Sticker": return ItemType.Sticker; } return ItemType.Unknown; @@ -51,6 +58,13 @@ public override void Write(Utf8JsonWriter writer, ItemType value, JsonSerializer switch (value) { case ItemType.Part: typeString = "Part"; break; + case ItemType.Minibuild: typeString = "Minibuild"; break; + case ItemType.Packaging: typeString = "Packaging"; break; + case ItemType.Set: typeString = "Set"; break; + case ItemType.Instructions: typeString = "Instructions"; break; + case ItemType.Gear: typeString = "Gear"; break; + case ItemType.Minifigure: typeString = "Minifigure"; break; + case ItemType.Sticker: typeString = "Sticker"; break; }