From c3876add1e19a7f3091876d897faa24a62c3b432 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Thu, 24 Apr 2025 12:31:39 +0300 Subject: [PATCH] chore: added serialized entity class --- Engine.Serialization/SerializedEntity.cs | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Engine.Serialization/SerializedEntity.cs diff --git a/Engine.Serialization/SerializedEntity.cs b/Engine.Serialization/SerializedEntity.cs new file mode 100644 index 0000000..8631021 --- /dev/null +++ b/Engine.Serialization/SerializedEntity.cs @@ -0,0 +1,59 @@ +using System.Reflection; +using Syntriax.Engine.Core; + +namespace Syntriax.Engine.Serialization; + +public class SerializedEntity +{ + public string Id { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; + + public Dictionary Public = []; + public Dictionary Private = []; + + public SerializedEntity() { } + public SerializedEntity(object entity) + { + Type type = entity.GetType(); + Type = type.FullName ?? throw new($"Object {entity} has no {nameof(System.Type.FullName)}"); + Id = type.GetProperty(nameof(IEntity.Id), BindingFlags.Instance | BindingFlags.Public)?.GetValue(entity)?.ToString() ?? string.Empty; + + foreach (PropertyInfo privatePropertyInfo in Utils.GetPropertyInfosIncludingBaseClasses(type, BindingFlags.Instance | BindingFlags.NonPublic)) + { + if (privatePropertyInfo.HasAttribute()) + continue; + + Private.Add(privatePropertyInfo.Name, privatePropertyInfo.GetValue(entity)); + } + + foreach (PropertyInfo publicPropertyInfo in Utils.GetPropertyInfosIncludingBaseClasses(type, BindingFlags.Instance | BindingFlags.Public)) + { + if (publicPropertyInfo.HasAttribute()) + continue; + + Public.Add(publicPropertyInfo.Name, publicPropertyInfo.GetValue(entity)); + } + + foreach (FieldInfo privateFieldInfo in Utils.GetFieldInfosIncludingBaseClasses(type, BindingFlags.Instance | BindingFlags.NonPublic)) + { + if (privateFieldInfo.HasAttribute()) + continue; + + // if (!privateFieldInfo.HasAttribute()) + // continue; + + Private.Add(privateFieldInfo.Name, privateFieldInfo.GetValue(entity)); + } + + foreach (FieldInfo publicFieldInfo in Utils.GetFieldInfosIncludingBaseClasses(type, BindingFlags.Instance | BindingFlags.Public)) + { + if (publicFieldInfo.HasAttribute()) + continue; + + // if (!publicFieldInfo.HasAttribute()) + // continue; + + Public.Add(publicFieldInfo.Name, publicFieldInfo.GetValue(entity)); + } + } +}