This commit is contained in:
CortexCore 2025-01-09 17:49:38 +08:00
parent 0287c1a2fc
commit 01e7e4e35e
5 changed files with 159 additions and 16 deletions

View File

@ -23,33 +23,35 @@ namespace BITKit
public static string GetDisplayName(this object self)
{
{
if (self.GetType().GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
var type = self is Type t? t: self.GetType();
if (type.GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
{
return displayNameAttribute.DisplayName;
}
#if NET5_0_OR_GREATER
if (self.GetType().GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
if (type.GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
{
return displayAttribute.Name;
}
#endif
}
{
if (self is Enum)
{
var field = self.GetType().GetField(self.ToString()!);
if (self is not Enum) return self.ToString();
var field = self.GetType().GetField(self.ToString()!);
if(field is null) return self.ToString();
if (field.GetCustomAttribute<DisplayNameAttribute>() is DisplayNameAttribute displayNameAttribute)
{
return displayNameAttribute.DisplayName;
}
#if NET5_0_OR_GREATER
if (field.GetCustomAttribute<DisplayAttribute>() is DisplayAttribute displayAttribute)
{
return displayAttribute.Name;
}
#endif
if (field.GetCustomAttribute<DisplayNameAttribute>() is { } displayNameAttribute)
{
return displayNameAttribute.DisplayName;
}
#if NET5_0_OR_GREATER
if (field.GetCustomAttribute<DisplayAttribute>() is { } displayAttribute)
{
return displayAttribute.Name;
}
#endif
}
return self.ToString();
}

View File

@ -66,7 +66,7 @@ namespace BITKit
public override string ToString()
{
return JsonConvert.SerializeObject(this);
return JsonConvert.SerializeObject(this,Formatting.Indented);
}
[JsonProperty("status_code")] public int StatusCode = 200;

View File

@ -16,6 +16,34 @@ namespace BITKit
public T Value { get; set; }=default;
public object Obj { get => Value; set => Value = (T)value; }
}
public class PropertyWrapper<T> : IWrapper<T>
{
private readonly PropertyInfo _field;
private readonly object _target;
public event Action<T, T> OnValueChanged;
public PropertyWrapper(PropertyInfo field, object target)
{
_field = field;
_target = target ?? throw new ArgumentNullException(nameof(target));
}
public T Value
{
get => (T)_field.GetValue(_target);
set
{
var prev = Value;
_field.SetValue(_target, value);
OnValueChanged?.Invoke(prev, value);
}
}
public object Obj
{
get => _field.GetValue(_target);
set => _field.SetValue(_target, value);
}
}
public class FieldWrapper<T> : IWrapper<T>
{
private readonly FieldInfo _field;

View File

@ -5,6 +5,82 @@ using Unity.Mathematics;
#if NET5_0_OR_GREATER
namespace BITKit
{
public class Int3JsonConvertJsonConverter : JsonConverter<int3>
{
public override void WriteJson(JsonWriter writer, int3 value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(value.x));
writer.WriteValue(value.x);
writer.WritePropertyName(nameof(value.y));
writer.WriteValue(value.y);
writer.WritePropertyName(nameof(value.z));
writer.WriteValue(value.z);
writer.WriteEndObject();
}
public override int3 ReadJson(JsonReader reader, Type objectType, int3 existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var result = new int3(0, 0, 0); // 默认值为 (0, 0, 0)
while (reader.TokenType != JsonToken.EndObject)
{
reader.Read();
if (reader.TokenType != JsonToken.PropertyName) continue;
var property = reader.Value.ToString();
if (property == nameof(int3.x)) result.x = (int)reader.ReadAsInt32()!;
if (property == nameof(int3.y)) result.y = (int)reader.ReadAsInt32()!;
if (property == nameof(int3.z)) result.z = (int)reader.ReadAsInt32()!;
}
return result;
}
}
public class Int4JsonConvertJsonConverter : JsonConverter<int4>
{
public override void WriteJson(JsonWriter writer, int4 value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(value.x));
writer.WriteValue(value.x);
writer.WritePropertyName(nameof(value.y));
writer.WriteValue(value.y);
writer.WritePropertyName(nameof(value.z));
writer.WriteValue(value.z);
writer.WritePropertyName(nameof(value.w));
writer.WriteValue(value.w);
writer.WriteEndObject();
}
public override int4 ReadJson(JsonReader reader, Type objectType, int4 existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var result = new int4(0, 0, 0, 0); // 默认值为 (0, 0, 0, 0)
while (reader.TokenType != JsonToken.EndObject)
{
reader.Read();
if (reader.TokenType != JsonToken.PropertyName) continue;
var property = reader.Value.ToString();
if (property == nameof(int4.x)) result.x = (int)reader.ReadAsInt32()!;
if (property == nameof(int4.y)) result.y = (int)reader.ReadAsInt32()!;
if (property == nameof(int4.z)) result.z = (int)reader.ReadAsInt32()!;
if (property == nameof(int4.w)) result.w = (int)reader.ReadAsInt32()!;
}
return result;
}
}
public class Float2JsonConvertJsonConverter:JsonConverter<float2>
{
public override void WriteJson(JsonWriter writer, float2 value, JsonSerializer serializer)
@ -37,6 +113,42 @@ namespace BITKit
return result;
}
}
public class Float3JsonConvertJsonConverter : JsonConverter<float3>
{
public override void WriteJson(JsonWriter writer, float3 value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(value.x));
writer.WriteValue((double)value.x); // 将 float 转为 double避免精度问题
writer.WritePropertyName(nameof(value.y));
writer.WriteValue((double)value.y); // 将 float 转为 double
writer.WritePropertyName(nameof(value.z));
writer.WriteValue((double)value.z); // 将 float 转为 double
writer.WriteEndObject();
}
public override float3 ReadJson(JsonReader reader, Type objectType, float3 existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var result = float3.zero; // 默认值为 (0, 0, 0)
while (reader.TokenType != JsonToken.EndObject)
{
reader.Read();
if (reader.TokenType != JsonToken.PropertyName) continue;
var property = reader.Value.ToString();
if (property == nameof(float3.x)) result.x = (float)reader.ReadAsDouble()!;
if (property == nameof(float3.y)) result.y = (float)reader.ReadAsDouble()!;
if (property == nameof(float3.z)) result.z = (float)reader.ReadAsDouble()!;
}
return result;
}
}
public class Float4JsonConvertJsonConverter:JsonConverter<float4>
{
public override void WriteJson(JsonWriter writer, float4 value, JsonSerializer serializer)

View File

@ -61,6 +61,7 @@ namespace BITKit.UX
get=>_currentTab;
set
{
if(_currentTab == value)return;
_currentTab = value;
SetTabs(value);
}