ContainerAdditionals.cs
1 using Newtonsoft.Json; 2 using Newtonsoft.Json.Linq; 3 4 namespace KubernetesWorkflow.Recipe 5 { 6 public class ContainerAdditionals 7 { 8 public ContainerAdditionals(Additional[] additionals) 9 { 10 Additionals = additionals; 11 } 12 13 public static ContainerAdditionals CreateFromUserData(IEnumerable<object> userData) 14 { 15 return new ContainerAdditionals(userData.Select(ConvertToAdditional).ToArray()); 16 } 17 18 public Additional[] Additionals { get; } 19 20 public T? Get<T>() 21 { 22 var typeName = GetTypeName(typeof(T)); 23 var userData = Additionals.SingleOrDefault(a => a.Type == typeName); 24 if (userData == null) return default; 25 return JsonConvert.DeserializeObject<T>(userData.UserData); 26 } 27 28 private static Additional ConvertToAdditional(object userData) 29 { 30 var typeName = GetTypeName(userData.GetType()); 31 return new Additional(typeName, JsonConvert.SerializeObject(userData)); 32 } 33 34 private static string GetTypeName(Type type) 35 { 36 var typeName = type.FullName; 37 if (string.IsNullOrEmpty(typeName)) throw new Exception("Object type fullname is null or empty: " + type); 38 return typeName; 39 } 40 } 41 42 public class Additional 43 { 44 public Additional(string type, string userData) 45 { 46 Type = type; 47 UserData = userData; 48 } 49 50 public string Type { get; } 51 public string UserData { get; } 52 } 53 }