In diesem Artikel wird besprochen, wie JSON.NET verwendet wird, um die von der API zurückgegebenen JSON -Daten zu verarbeiten. Wenn Sie die SendGrid -Ereignis -API als Beispiel nehmen, kann sein categories
Attribut eine einzelne Zeichenfolge oder ein String -Array sein.
-Treibers inkonsistent. categories
<code class="language-json">[ { "email": "test1@example.com", "timestamp": 1337966815, "category": [ "newuser", "transactional" ], "event": "open" }, { "email": "test2@example.com", "timestamp": 1337966815, "category": "olduser", "event": "open" } ]</code>
zu erstellen. Der Konverter kann den Werttyp des JsonConverter
-attributs identifizieren und korrekt in categories
umwandeln. List<string>
<code class="language-csharp">using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; public class Item { [JsonProperty("email")] public string Email { get; set; } [JsonProperty("timestamp")] public int Timestamp { get; set; } [JsonProperty("event")] public string Event { get; set; } [JsonProperty("category")] [JsonConverter(typeof(SingleOrArrayConverter<string>))] public List<string> Categories { get; set; } } public class SingleOrArrayConverter<T> : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(List<T>); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JToken token = JToken.Load(reader); if (token.Type == JTokenType.Array) { return token.ToObject<List<T>>(); } if (token.Type == JTokenType.Null) { return null; } return new List<T> { token.ToObject<T>() }; } public override bool CanWrite => false; // 只支持反序列化 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } } public class Example { public static void Main(string[] args) { string json = @" [ { ""email"": ""test1@example.com"", ""timestamp"": 1337966815, ""category"": [ ""newuser"", ""transactional"" ], ""event"": ""open"" }, { ""email"": ""test2@example.com"", ""timestamp"": 1337966815, ""category"": ""olduser"", ""event"": ""open"" } ]"; List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json); foreach (var item in items) { Console.WriteLine($"Email: {item.Email}, Timestamp: {item.Timestamp}, Event: {item.Event}, Categories: {string.Join(", ", item.Categories)}"); } } }</code>
Klasse und eine generische Item
. SingleOrArrayConverter
kann einzeln und ein Array verarbeiten und es in SingleOrArrayConverter
umwandeln. Das Hauptprogramm zeigt, wie die JSON -Daten des Konverters der Back Serialization JSON verwendet werden. Beachten Sie, dass dieser Konverter nur den Abbau unterstützt (List<string>
). CanWrite => false
Das obige ist der detaillierte Inhalt vonWie kann ich mit JSON.NET Deserialisierung eines einzelnen Elements oder Arrays für dieselbe Eigenschaft umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!