(client):feat:添加对列表定义读取的支持,ui管理器将对没有键的窗口也进行统一管理

This commit is contained in:
m0_75251201
2025-07-20 15:21:21 +08:00
parent 2e74833a18
commit 9dcc67d710
77 changed files with 2158 additions and 3750 deletions

View File

@ -279,8 +279,14 @@ namespace Data
value = reference;
}
}
else if(field.FieldType.IsArray)
{
value = ProcessArrayField(field, element);
}
else
{
value = Convert.ChangeType(element.Value, field.FieldType);
}
field.SetValue(define, value);
}
catch (Exception ex)
@ -289,7 +295,44 @@ namespace Data
}
}
}
private static object ProcessArrayField(FieldInfo field, XElement element)
{
Type elementType = field.FieldType.GetElementType();
if (elementType == null) return null;
var arrayElements = new List<object>();
foreach (var liElement in element.Elements())
{
if (elementType.IsSubclassOf(typeof(Define)))
{
Define nestedDefine = (Define)Activator.CreateInstance(elementType);
DefaultInitDefine(nestedDefine, liElement, elementType);
arrayElements.Add(nestedDefine);
}
else if (elementType.IsArray) // 嵌套数组处理
{
// 递归处理嵌套数组
var nestedArray = ProcessArrayField(
new { FieldType = elementType }.GetType().GetField("FieldType"),
liElement
);
arrayElements.Add(nestedArray);
}
else
{
// 基本类型处理
arrayElements.Add(Convert.ChangeType(liElement.Value, elementType));
}
}
// 构建结果数组
Array resultArray = Array.CreateInstance(elementType, arrayElements.Count);
for (int i = 0; i < arrayElements.Count; i++)
{
resultArray.SetValue(arrayElements[i], i);
}
return resultArray;
}
/// <summary>
/// 从 List<c>XDocument</c> 中查找指定根元素名称的文档。
/// </summary>