-
Notifications
You must be signed in to change notification settings - Fork 0
/
StateInfo.cs
141 lines (120 loc) · 4.59 KB
/
StateInfo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace COVID_19.QuickType.StateInfo
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class StateInfo
{
[JsonProperty("state")]
public string State { get; set; }
[JsonProperty("covid19SiteOld")]
public Uri Covid19SiteOld { get; set; }
[JsonProperty("covid19Site")]
public Uri Covid19Site { get; set; }
[JsonProperty("covid19SiteSecondary")]
public Uri Covid19SiteSecondary { get; set; }
[JsonProperty("twitter")]
public string Twitter { get; set; }
[JsonProperty("pui")]
public Pui Pui { get; set; }
[JsonProperty("pum")]
public bool Pum { get; set; }
[JsonProperty("notes", NullValueHandling = NullValueHandling.Ignore)]
public string Notes { get; set; }
[JsonProperty("fips")]
public string Fips { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
public enum Pui { AllData, NoData, OnlyPositives, PositivesNegatives, PositivesOnly, PuiAllData, PuiNoData };
public partial class StateInfo
{
public static List<StateInfo> FromJson(string json) => JsonConvert.DeserializeObject<List<StateInfo>>(json, QuickType.StateInfo.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this List<StateInfo> self) => JsonConvert.SerializeObject(self, QuickType.StateInfo.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
PuiConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class PuiConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(Pui) || t == typeof(Pui?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "All Data":
return Pui.PuiAllData;
case "All data":
return Pui.AllData;
case "No Data":
return Pui.PuiNoData;
case "No data":
return Pui.NoData;
case "Only positives":
return Pui.OnlyPositives;
case "Positives + Negatives":
return Pui.PositivesNegatives;
case "Positives Only":
return Pui.PositivesOnly;
}
throw new Exception("Cannot unmarshal type Pui");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (Pui)untypedValue;
switch (value)
{
case Pui.PuiAllData:
serializer.Serialize(writer, "All Data");
return;
case Pui.AllData:
serializer.Serialize(writer, "All data");
return;
case Pui.PuiNoData:
serializer.Serialize(writer, "No Data");
return;
case Pui.NoData:
serializer.Serialize(writer, "No data");
return;
case Pui.OnlyPositives:
serializer.Serialize(writer, "Only positives");
return;
case Pui.PositivesNegatives:
serializer.Serialize(writer, "Positives + Negatives");
return;
case Pui.PositivesOnly:
serializer.Serialize(writer, "Positives Only");
return;
}
throw new Exception("Cannot marshal type Pui");
}
public static readonly PuiConverter Singleton = new PuiConverter();
}
}