diff --git a/ScriptCore/Serialization/DontSerializeFieldAttribute.cs b/ScriptCore/Serialization/DontSerializeFieldAttribute.cs
new file mode 100644
index 0000000..6850a9c
--- /dev/null
+++ b/ScriptCore/Serialization/DontSerializeFieldAttribute.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace GlitchyEngine.Serialization;
+
+///
+/// Specifies that the field should not be serialized.
+///
+///
+[AttributeUsage(AttributeTargets.Field)]
+public sealed class DontSerializeFieldAttribute : Attribute
+{
+}
diff --git a/ScriptCore/Serialization/EntitySerializer.cs b/ScriptCore/Serialization/EntitySerializer.cs
new file mode 100644
index 0000000..4ae0f15
--- /dev/null
+++ b/ScriptCore/Serialization/EntitySerializer.cs
@@ -0,0 +1,290 @@
+using GlitchyEngine.Editor;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Reflection;
+using System.Text;
+using GlitchyEngine.Core;
+using GlitchyEngine.Extensions;
+using System.Xml.Linq;
+
+namespace GlitchyEngine.Serialization;
+
+public static class EntitySerializer
+{
+ public class SerializationContext
+ {
+ StringBuilder _builder = new();
+
+ public Dictionary