Can it be simplified?

public class Item
	{
		[JsonProperty] public long Id;
		[JsonProperty] public string DisplayName;
		[JsonProperty] public string ShortName;
		[JsonProperty] public string Description;
		[JsonProperty] public int Stack;
		[JsonProperty] public bool Hidden;
		[JsonProperty] public ItemDefinition.Flag Flags;
		[JsonProperty] public ItemCategory Category;
		[JsonProperty] public Rarity Rarity;
		[JsonProperty] public SteamDlcItem? SteamDlcItem;
		[JsonProperty] public string[] ItemMods;
		[JsonProperty] public Ser_ItemModBurnable? ItemMod_Burnable;
		[JsonProperty] public Ser_ItemModCompostable? ItemMod_Compostable;
		[JsonProperty] public Ser_ItemModDeployable? ItemMod_Deployable;
		[JsonProperty] public Ser_ItemModEntity? ItemMod_Entity;
		[JsonProperty] public Ser_ItemModEntityReference? ItemMod_EntityReference;
		[JsonProperty] public Ser_ItemModFoodSpoiling? ItemMod_FoodSpoiling;
		[JsonProperty] public Ser_ItemModRepair? ItemMod_Repair;
		[JsonProperty] public string? ItemMod_Wearable;

		public static T Parse<T>(ItemDefinition definition) where T : Item
		{
			var instance = Activator.CreateInstance<T>();

			instance.Id = definition.itemid;
			instance.DisplayName = definition.displayName.english;
			instance.Description = definition.displayDescription.english;
			instance.ShortName = definition.shortname;
			instance.Stack = definition.stackable;
			instance.Hidden = definition.hidden;
			instance.Flags = definition.flags;
			instance.Category = definition.category;
			instance.Rarity = definition.rarity;
			if (definition.steamDlc != null)
			{
				instance.SteamDlcItem = new SteamDlcItem
				{
					Name = definition.steamDlc.dlcName.english,
					AppId = definition.steamDlc.dlcAppID,
				};
			}

			var components = definition.GetComponents<MonoBehaviour>().Where(x => x != definition).ToArray();
			instance.ItemMods = components.Select(x => x.GetType().ToString()).ToArray();

			instance.ItemMod_Burnable = Ser_ItemModBurnable.TryCreate(definition.ItemModBurnable);
			instance.ItemMod_Compostable = Ser_ItemModCompostable.TryCreate(components.OfType<ItemModCompostable>().FirstOrDefault());
			instance.ItemMod_Deployable = Ser_ItemModDeployable.TryCreate(components.OfType<ItemModDeployable>().FirstOrDefault());
			instance.ItemMod_Entity = Ser_ItemModEntity.TryCreate(components.OfType<ItemModEntity>().FirstOrDefault());
			instance.ItemMod_EntityReference = Ser_ItemModEntityReference.TryCreate(components.OfType<ItemModEntityReference>().FirstOrDefault());
			instance.ItemMod_FoodSpoiling = Ser_ItemModFoodSpoiling.TryCreate(components.OfType<ItemModFoodSpoiling>().FirstOrDefault());
			instance.ItemMod_Repair = Ser_ItemModRepair.TryCreate(components.OfType<ItemModRepair>().FirstOrDefault());

			return instance;
		}

		public record Ser_ItemModBurnable
		{
			[JsonProperty] private float fuelAmount;
			[JsonProperty] private bool hasByProduct;
			[JsonProperty] private int byproductItemId;
			[JsonProperty] private string byproductItemShortName;
			[JsonProperty] private int byproductAmount;
			[JsonProperty] private float byproductChance;

			public static Ser_ItemModBurnable? TryCreate(ItemModBurnable? mod)
			{
				return mod == null ? null : new Ser_ItemModBurnable(mod);
			}

			public Ser_ItemModBurnable(ItemModBurnable mod)
			{
				fuelAmount = mod.fuelAmount;
				byproductItemId = mod.byproductItem?.itemid ?? 0;
				byproductItemShortName = mod.byproductItem?.shortname ?? "";
				byproductAmount = mod.byproductAmount;
				byproductChance = mod.byproductChance;
			}
		}

		public record Ser_ItemModCompostable
		{
			[JsonProperty] public float totalFertilizerProduced;
			[JsonProperty] public float baitValue;
			[JsonProperty] public int maxBaitStack;

			public static Ser_ItemModCompostable? TryCreate(ItemModCompostable? mod)
			{
				return mod == null ? null : new Ser_ItemModCompostable(mod);
			}

			public Ser_ItemModCompostable(ItemModCompostable mod)
			{
				totalFertilizerProduced = mod.TotalFertilizerProduced;
				baitValue = mod.BaitValue;
				maxBaitStack = mod.MaxBaitStack;
			}
		}

		public record Ser_ItemModDeployable
		{
			[JsonProperty] private string resourcePath;
			[JsonProperty] private uint resourceID;

			public static Ser_ItemModDeployable? TryCreate(ItemModDeployable? mod)
			{
				return mod == null ? null : new Ser_ItemModDeployable(mod);
			}

			public Ser_ItemModDeployable(ItemModDeployable mod)
			{
				if (!string.IsNullOrEmpty(mod.entityPrefab.guid))
				{
					resourcePath = mod.entityPrefab.resourcePath;
					resourceID = mod.entityPrefab.resourceID;
				}
				else
				{
					resourcePath = "";
					resourceID = 0;
				}
			}
		}

		public record Ser_ItemModEntity
		{
			[JsonProperty] private string resourcePath;
			[JsonProperty] private uint resourceID;

			public static Ser_ItemModEntity? TryCreate(ItemModEntity? mod)
			{
				return mod == null ? null : new Ser_ItemModEntity(mod);
			}

			public Ser_ItemModEntity(ItemModEntity mod)
			{
				if (!string.IsNullOrEmpty(mod.entityPrefab.guid))
				{
					resourcePath = mod.entityPrefab.resourcePath;
					resourceID = mod.entityPrefab.resourceID;
				}
				else
				{
					resourcePath = "";
					resourceID = 0;
				}
			}
		}

		public record Ser_ItemModEntityReference
		{
			[JsonProperty] private string resourcePath;
			[JsonProperty] private uint resourceID;

			public static Ser_ItemModEntityReference? TryCreate(ItemModEntityReference? mod)
			{
				return mod == null ? null : new Ser_ItemModEntityReference(mod);
			}

			public Ser_ItemModEntityReference(ItemModEntityReference mod)
			{
				if (!string.IsNullOrEmpty(mod.entityPrefab.guid))
				{
					resourcePath = mod.entityPrefab.resourcePath;
					resourceID = mod.entityPrefab.resourceID;
				}
				else
				{
					resourcePath = "";
					resourceID = 0;
				}
			}
		}

		public record Ser_ItemModFoodSpoiling
		{
			[JsonProperty] private float totalSpoilTimeHours;
			[JsonProperty] private int spoilItemId;

			public static Ser_ItemModFoodSpoiling? TryCreate(ItemModFoodSpoiling? mod)
			{
				return mod == null ? null : new Ser_ItemModFoodSpoiling(mod);
			}

			public Ser_ItemModFoodSpoiling(ItemModFoodSpoiling mod)
			{
				totalSpoilTimeHours = mod.TotalSpoilTimeHours;
				spoilItemId = mod.SpoilItem?.itemid ?? 0;
			}
		}

		public record Ser_ItemModRepair
		{
			[JsonProperty] private float conditionLost;
			[JsonProperty] private int workbenchLvlRequired;
			[JsonProperty] private bool canUseRepairBench;

			public static Ser_ItemModRepair? TryCreate(ItemModRepair? mod)
			{
				return mod == null ? null : new Ser_ItemModRepair(mod);
			}

			public Ser_ItemModRepair(ItemModRepair mod)
			{
				conditionLost = mod.conditionLost;
				workbenchLvlRequired = mod.workbenchLvlRequired;
				canUseRepairBench = mod.canUseRepairBench;
			}
		}
	}