ImageSearchResult.cs
using System;
using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; #nullable enable namespace GenXdev.Helpers { public partial class ImageSearchResult { [JsonProperty("description", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultDescription Description { get; set; } = new ImageSearchResultDescription(); [JsonProperty("metadata", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultMetadata Metadata { get; set; } = new ImageSearchResultMetadata(); [JsonProperty("height", NullValueHandling = NullValueHandling.Ignore)] public long Height { get; set; } [JsonProperty("objects", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultObjects Objects { get; set; } = new ImageSearchResultObjects(); [JsonProperty("keywords", NullValueHandling = NullValueHandling.Ignore)] public List<string> Keywords { get { if (Description == null) return new List<string>(); return Description.Keywords; } set { if (Description == null) Description = new ImageSearchResultDescription(); if (value == null) return; Description = new ImageSearchResultDescription(); Description.Keywords = value; } } [JsonProperty("path")] public string Path { get; set; } = string.Empty; [JsonProperty("scenes", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultScenes Scenes { get; set; } = new ImageSearchResultScenes(); [JsonProperty("people", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultPeople People { get; set; } = new ImageSearchResultPeople(); [JsonProperty("width", NullValueHandling = NullValueHandling.Ignore)] public long Width { get; set; } } public partial class ImageSearchResultDescription { [JsonProperty("style_type", NullValueHandling = NullValueHandling.Ignore)] public string Style_Type { get; set; } = string.Empty; [JsonProperty("short_description", NullValueHandling = NullValueHandling.Ignore)] public string Short_Description { get; set; } = string.Empty; [JsonProperty("has_nudity", NullValueHandling = NullValueHandling.Ignore)] public bool? Has_Nudity { get; set; } = null; [JsonProperty("keywords", NullValueHandling = NullValueHandling.Ignore)] public List<string> Keywords { get; set; } = new List<string>(); [JsonProperty("long_description", NullValueHandling = NullValueHandling.Ignore)] public string Long_Description { get; set; } = string.Empty; [JsonProperty("picture_type", NullValueHandling = NullValueHandling.Ignore)] public string Picture_Type { get; set; } = string.Empty; [JsonProperty("has_explicit_content", NullValueHandling = NullValueHandling.Ignore)] public bool? Has_Explicit_Content { get; set; } = null; [JsonProperty("overall_mood_of_image", NullValueHandling = NullValueHandling.Ignore)] public string Overall_MoodOf_Image { get; set; } = string.Empty; } public partial class ImageSearchResultMetadata { [JsonProperty("GPS", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultGps Gps { get; set; } = new ImageSearchResultGps(); [JsonProperty("Basic", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultBasic Basic { get; set; } = new ImageSearchResultBasic(); [JsonProperty("Author", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultAuthor Author { get; set; } = new ImageSearchResultAuthor(); [JsonProperty("Exposure", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultExposure Exposure { get; set; } = new ImageSearchResultExposure(); [JsonProperty("DateTime", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultDateTime DateTime { get; set; } = new ImageSearchResultDateTime(); [JsonProperty("Other", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultOther Other { get; set; } = new ImageSearchResultOther(); [JsonProperty("Camera", NullValueHandling = NullValueHandling.Ignore)] public ImageSearchResultCamera Camera { get; set; } = new ImageSearchResultCamera(); } // GPS: latitude, longitude, etc. public partial class ImageSearchResultGps { [JsonProperty("Latitude", NullValueHandling = NullValueHandling.Ignore)] public double? Latitude { get; set; } [JsonProperty("Longitude", NullValueHandling = NullValueHandling.Ignore)] public double? Longitude { get; set; } [JsonProperty("Altitude", NullValueHandling = NullValueHandling.Ignore)] public double? Altitude { get; set; } [JsonProperty("LatitudeDMS", NullValueHandling = NullValueHandling.Ignore)] public string LatitudeDMS { get; set; } = string.Empty; [JsonProperty("LongitudeDMS", NullValueHandling = NullValueHandling.Ignore)] public string LongitudeDMS { get; set; } = string.Empty; [JsonProperty("LatitudeError", NullValueHandling = NullValueHandling.Ignore)] public string LatitudeError { get; set; } = string.Empty; [JsonProperty("LongitudeError", NullValueHandling = NullValueHandling.Ignore)] public string LongitudeError { get; set; } = string.Empty; [JsonProperty("AltitudeError", NullValueHandling = NullValueHandling.Ignore)] public string AltitudeError { get; set; } = string.Empty; } // Author: Contains artist, copyright, etc. (string properties, may be empty) public partial class ImageSearchResultAuthor { [JsonProperty("Artist", NullValueHandling = NullValueHandling.Ignore)] public string Artist { get; set; } = string.Empty; [JsonProperty("Copyright", NullValueHandling = NullValueHandling.Ignore)] public string Copyright { get; set; } = string.Empty; } // Basic: dimensions, format, etc. public partial class ImageSearchResultBasic { [JsonProperty("Width", NullValueHandling = NullValueHandling.Ignore)] public long Width { get; set; } [JsonProperty("Height", NullValueHandling = NullValueHandling.Ignore)] public long Height { get; set; } [JsonProperty("PixelFormat", NullValueHandling = NullValueHandling.Ignore)] public string PixelFormat { get; set; } = string.Empty; [JsonProperty("Format", NullValueHandling = NullValueHandling.Ignore)] public string Format { get; set; } = string.Empty; [JsonProperty("HorizontalResolution", NullValueHandling = NullValueHandling.Ignore)] public double HorizontalResolution { get; set; } [JsonProperty("VerticalResolution", NullValueHandling = NullValueHandling.Ignore)] public double VerticalResolution { get; set; } [JsonProperty("FileSizeBytes", NullValueHandling = NullValueHandling.Ignore)] public long FileSizeBytes { get; set; } [JsonProperty("FileName", NullValueHandling = NullValueHandling.Ignore)] public string FileName { get; set; } = string.Empty; [JsonProperty("FileExtension", NullValueHandling = NullValueHandling.Ignore)] public string FileExtension { get; set; } = string.Empty; } // Exposure: aperture, shutter speed, ISO, etc. public partial class ImageSearchResultExposure { [JsonProperty("FNumber", NullValueHandling = NullValueHandling.Ignore)] public double? FNumber { get; set; } [JsonProperty("ExposureTime", NullValueHandling = NullValueHandling.Ignore)] public double? ExposureTime { get; set; } [JsonProperty("ISOSpeedRatings", NullValueHandling = NullValueHandling.Ignore)] public int? ISOSpeedRatings { get; set; } [JsonProperty("FocalLength", NullValueHandling = NullValueHandling.Ignore)] public double? FocalLength { get; set; } [JsonProperty("ExposureProgram", NullValueHandling = NullValueHandling.Ignore)] public int? ExposureProgram { get; set; } [JsonProperty("MeteringMode", NullValueHandling = NullValueHandling.Ignore)] public int? MeteringMode { get; set; } [JsonProperty("Flash", NullValueHandling = NullValueHandling.Ignore)] public int? Flash { get; set; } } // Camera: make, model, etc. public partial class ImageSearchResultCamera { [JsonProperty("Make", NullValueHandling = NullValueHandling.Ignore)] public string Make { get; set; } = string.Empty; [JsonProperty("Model", NullValueHandling = NullValueHandling.Ignore)] public string Model { get; set; } = string.Empty; [JsonProperty("Software", NullValueHandling = NullValueHandling.Ignore)] public string Software { get; set; } = string.Empty; } // DateTime: when taken, modified, etc. public partial class ImageSearchResultDateTime { [JsonProperty("DateTime", NullValueHandling = NullValueHandling.Ignore)] public string DateTime { get; set; } = string.Empty; [JsonProperty("DateTimeOriginal", NullValueHandling = NullValueHandling.Ignore)] public string DateTimeOriginal { get; set; } = string.Empty; [JsonProperty("DateTimeDigitized", NullValueHandling = NullValueHandling.Ignore)] public string DateTimeDigitized { get; set; } = string.Empty; } // GPS: latitude, longitude, etc. public partial class ImageSearchResultGPS { [JsonProperty("Latitude", NullValueHandling = NullValueHandling.Ignore)] public double? Latitude { get; set; } [JsonProperty("Longitude", NullValueHandling = NullValueHandling.Ignore)] public double? Longitude { get; set; } [JsonProperty("Altitude", NullValueHandling = NullValueHandling.Ignore)] public double? Altitude { get; set; } [JsonProperty("LatitudeDMS", NullValueHandling = NullValueHandling.Ignore)] public string LatitudeDMS { get; set; } = string.Empty; [JsonProperty("LongitudeDMS", NullValueHandling = NullValueHandling.Ignore)] public string LongitudeDMS { get; set; } = string.Empty; } // Other: software, comments, errors, etc. (dynamic, so use dictionary) public partial class ImageSearchResultOther { [JsonProperty("Software", NullValueHandling = NullValueHandling.Ignore)] public string Software { get; set; } = string.Empty; [JsonProperty("ColorSpace", NullValueHandling = NullValueHandling.Ignore)] public string ColorSpace { get; set; } = string.Empty; [JsonProperty("ResolutionUnit", NullValueHandling = NullValueHandling.Ignore)] public string ResolutionUnit { get; set; } = string.Empty; } public partial class ImageSearchResultObjects { [JsonProperty("objects", NullValueHandling = NullValueHandling.Ignore)] public List<ImageSearchResultObject> objects { get; set; } = new List<ImageSearchResultObject>(); [JsonProperty("object_counts", NullValueHandling = NullValueHandling.Ignore)] public Dictionary<string, int> object_counts { get; set; } = new Dictionary<string, int>(); [JsonProperty("count", NullValueHandling = NullValueHandling.Ignore)] public long Count { get; set; } } public partial class ImageSearchResultFacePrediction { [JsonProperty("confidence", NullValueHandling = NullValueHandling.Ignore)] public double Confidence { get; set; } [JsonProperty("y_min", NullValueHandling = NullValueHandling.Ignore)] public long Y_Min { get; set; } [JsonProperty("x_min", NullValueHandling = NullValueHandling.Ignore)] public long X_Min { get; set; } [JsonProperty("y_max", NullValueHandling = NullValueHandling.Ignore)] public long Y_Max { get; set; } [JsonProperty("x_max", NullValueHandling = NullValueHandling.Ignore)] public long X_Max { get; set; } [JsonProperty("userid", NullValueHandling = NullValueHandling.Ignore)] public string UserId { get; set; } = string.Empty; } public partial class ImageSearchResultObject { [JsonProperty("confidence", NullValueHandling = NullValueHandling.Ignore)] public double Confidence { get; set; } [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] public string Label { get; set; } = string.Empty; [JsonProperty("y_min", NullValueHandling = NullValueHandling.Ignore)] public long Y_Min { get; set; } [JsonProperty("x_min", NullValueHandling = NullValueHandling.Ignore)] public long X_Min { get; set; } [JsonProperty("y_max", NullValueHandling = NullValueHandling.Ignore)] public long Y_Max { get; set; } [JsonProperty("x_max", NullValueHandling = NullValueHandling.Ignore)] public long X_Max { get; set; } } public partial class ImageSearchResultPeople { [JsonProperty("faces", NullValueHandling = NullValueHandling.Ignore)] public List<string> Faces { get; set; } = new List<string>(); [JsonProperty("success", NullValueHandling = NullValueHandling.Ignore)] public bool Success { get; set; } [JsonProperty("count", NullValueHandling = NullValueHandling.Ignore)] public long Count { get; set; } [JsonProperty("predictions", NullValueHandling = NullValueHandling.Ignore)] public List<ImageSearchResultFacePrediction> Predictions { get; set; } = new List<ImageSearchResultFacePrediction>(); } public partial class ImageSearchResultScenes { [JsonProperty("confidence", NullValueHandling = NullValueHandling.Ignore)] public double Confidence { get; set; } [JsonProperty("success", NullValueHandling = NullValueHandling.Ignore)] public bool Success { get; set; } [JsonProperty("processed_at", NullValueHandling = NullValueHandling.Ignore)] public DateTimeOffset Processed_At { get; set; } [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] public string Label { get; set; } = string.Empty; [JsonProperty("scene", NullValueHandling = NullValueHandling.Ignore)] public string Scene { get; set; } = string.Empty; [JsonProperty("confidence_percentage", NullValueHandling = NullValueHandling.Ignore)] public double Confidence_Percentage { get; set; } } public partial class ImageSearchResult { public static ImageSearchResult FromJson(string json) => JsonConvert.DeserializeObject<ImageSearchResult>(json, GenXdev.Helpers.ImageSearchResultConverter.Settings); } public static class ImageSearchResultSerialize { public static string ToJson(this ImageSearchResult self) => JsonConvert.SerializeObject(self, GenXdev.Helpers.ImageSearchResultConverter.Settings); public static string ToJson(IEnumerable<ImageSearchResult> container) => JsonConvert.SerializeObject(container, GenXdev.Helpers.ImageSearchResultConverter.Settings); } internal static class ImageSearchResultConverter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } } |