using System; using System.Collections.Generic; using System.Text; // // // To parse this JSON data, add NuGet 'Newtonsoft.Json' then do: // // using QuickType; // // var welcome = Welcome.FromJson(jsonString); namespace RainApi { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Welcome { [JsonProperty("?xml")] public Xml Xml { get; set; } [JsonProperty("alert")] public Alert Alert { get; set; } } public partial class Alert { [JsonProperty("@xmlns")] public string Xmlns { get; set; } [JsonProperty("identifier")] public string Identifier { get; set; } [JsonProperty("sender")] public string Sender { get; set; } [JsonProperty("sent")] public DateTimeOffset Sent { get; set; } [JsonProperty("status")] public string Status { get; set; } [JsonProperty("msgType")] public string MsgType { get; set; } [JsonProperty("scope")] public string Scope { get; set; } [JsonProperty("references")] public string References { get; set; } [JsonProperty("info")] public Info[] Info { get; set; } } public partial class Info { [JsonProperty("language")] public string Language { get; set; } [JsonProperty("category")] public string Category { get; set; } [JsonProperty("event")] public string Event { get; set; } [JsonProperty("responseType")] public string ResponseType { get; set; } [JsonProperty("urgency")] public string Urgency { get; set; } [JsonProperty("severity")] public string Severity { get; set; } [JsonProperty("certainty")] public string Certainty { get; set; } [JsonProperty("eventCode")] public EventCode EventCode { get; set; } [JsonProperty("effective")] public DateTimeOffset Effective { get; set; } [JsonProperty("onset")] public DateTimeOffset Onset { get; set; } [JsonProperty("expires")] public DateTimeOffset Expires { get; set; } [JsonProperty("senderName")] public string SenderName { get; set; } [JsonProperty("headline")] public string Headline { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("web")] public Uri Web { get; set; } [JsonProperty("parameter")] public EventCode[] Parameter { get; set; } [JsonProperty("area")] public Area[] Area { get; set; } } public partial class Area { [JsonProperty("areaDesc")] public string AreaDesc { get; set; } [JsonProperty("geocode")] public EventCode Geocode { get; set; } } public partial class EventCode { [JsonProperty("valueName")] public ValueName ValueName { get; set; } [JsonProperty("value")] public string Value { get; set; } } public partial class Xml { [JsonProperty("@version")] public string Version { get; set; } [JsonProperty("@encoding")] public string Encoding { get; set; } } public enum ValueName { AlertColor, AlertTitle, ProfileCapTwpEvent10, SeverityLevel, TaiwanGeocode103, WebsiteColor }; public partial class Welcome { public static Welcome FromJson(string json) => JsonConvert.DeserializeObject(json, QuickType.Converter.Settings); } public static class Serialize { public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings); } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { ValueNameConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class ValueNameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ValueName) || t == typeof(ValueName?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "Taiwan_Geocode_103": return ValueName.TaiwanGeocode103; case "alert_color": return ValueName.AlertColor; case "alert_title": return ValueName.AlertTitle; case "profile:CAP-TWP:Event:1.0": return ValueName.ProfileCapTwpEvent10; case "severity_level": return ValueName.SeverityLevel; case "website_color": return ValueName.WebsiteColor; } throw new Exception("Cannot unmarshal type ValueName"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ValueName)untypedValue; switch (value) { case ValueName.TaiwanGeocode103: serializer.Serialize(writer, "Taiwan_Geocode_103"); return; case ValueName.AlertColor: serializer.Serialize(writer, "alert_color"); return; case ValueName.AlertTitle: serializer.Serialize(writer, "alert_title"); return; case ValueName.ProfileCapTwpEvent10: serializer.Serialize(writer, "profile:CAP-TWP:Event:1.0"); return; case ValueName.SeverityLevel: serializer.Serialize(writer, "severity_level"); return; case ValueName.WebsiteColor: serializer.Serialize(writer, "website_color"); return; } throw new Exception("Cannot marshal type ValueName"); } public static readonly ValueNameConverter Singleton = new ValueNameConverter(); } }