using System.Collections.Generic;
public class SerializedOrdersComponent
public string[] CompletedOrdersIds;
public SerializedOrder[] ActiveOrders;
public int[] ActiveTreesIds;
public int[] CompletedTreesIds;
public string StringField;
public class SerializedOrder
public int OrderCharacterId;
public bool IsSingleTaskOrder;
public static class ComponentFieldsDeserializationUtil
public static Dictionary<Type, FieldInfo[]> FieldsCache = new Dictionary<Type, FieldInfo[]>();
public static void InitializeNullFields<TSerializedType>(TSerializedType serialized) where TSerializedType: class
Type type = typeof(TSerializedType);
if (!FieldsCache.TryGetValue(type, out fields))
fields = type.GetFields();
FieldsCache.Add(type, fields);
foreach (FieldInfo fieldInfo in fields)
if (fieldInfo.GetValue(serialized) == null)
if (fieldInfo.FieldType.IsArray)
fieldInfo.SetValue(serialized, Activator.CreateInstance(fieldInfo.FieldType, 0));
fieldInfo.SetValue(serialized, Activator.CreateInstance(fieldInfo.FieldType));
public static void Main()
SerializedOrdersComponent component = new SerializedOrdersComponent();
ComponentFieldsDeserializationUtil.InitializeNullFields<SerializedOrdersComponent>(component);
Console.WriteLine(component.CompletedOrdersIds);
Console.WriteLine(component.ActiveOrders);
Console.WriteLine(component.ActiveTreesIds);
Console.WriteLine(component.CompletedTreesIds);