XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore.Analyzer.Test/Program.cs
+1
-6
Modified
XFEExtension.NetCore/XFETransform/StringConverter/JsonTransformer.cs
+1
-1
Modified
XFEExtension.NetCore/XFETransform/XFEConverter.cs
+28
-4
XFEstudio/XFEExtension
完善细分判断
b1be5d7
代码差异
3 个文件
+30
-11
@@ -1,8 +1,4 @@
1
using XFEExtension.NetCore.StringExtension;
2
using XFEExtension.NetCore.XFETransform;
3
using XFEExtension.NetCore.XFETransform.ObjectInfoAnalyzer;
4
5
namespace XFEExtension.NetCore.Analyzer.Test;
1
namespace XFEExtension.NetCore.Analyzer.Test;
6
2
7
3
internal class Program
8
4
{
@@ -12,6 +8,5 @@ internal class Program
12
8
{
13
9
Tags = [["123", "321"], ["1234567", "7654321"]]
14
10
};
15
XFEConverter.GetObjectInfo(new JsonTransformer(), "Json序列化对象", ObjectPlace.Main, 0, typeof(TestClass), testClass).OutPutObject().CW();
16
11
}
17
12
}
@@ -111,5 +111,5 @@ internal class JsonTransformer : StringConverter
111
111
return outString;
112
112
}
113
113
114
internal bool IsEnumerable(IObjectInfo objectInfo) => objectInfo.ObjectPlace == ObjectPlace.Array || objectInfo.ObjectPlace == ObjectPlace.List || objectInfo.ObjectPlace == ObjectPlace.ArrayMember || objectInfo.ObjectPlace == ObjectPlace.ListMember;
114
internal static bool IsEnumerable(IObjectInfo objectInfo) => objectInfo.ObjectPlace == ObjectPlace.Array || objectInfo.ObjectPlace == ObjectPlace.List || objectInfo.ObjectPlace == ObjectPlace.ArrayMember || objectInfo.ObjectPlace == ObjectPlace.ListMember;
115
115
}
@@ -109,21 +109,45 @@ public class XFEConverter
109
109
var subObjects = new List<IObjectInfo>();
110
110
foreach (var memberInfo in type.GetMembers((onlyPublic ? BindingFlags.Public : BindingFlags.NonPublic | BindingFlags.Public) | BindingFlags.Instance | BindingFlags.Static))
111
111
{
112
ObjectPlace currentObjectPlace;
112
113
if (memberInfo is PropertyInfo propertyInfo)
113
114
{
115
if (propertyInfo.PropertyType.IsAssignableTo(typeof(Array)))
116
currentObjectPlace = ObjectPlace.ArrayProperty;
117
else if (propertyInfo.PropertyType.IsAssignableTo(typeof(IEnumerable)))
118
currentObjectPlace = ObjectPlace.ListProperty;
119
else if (propertyInfo.PropertyType.IsAssignableTo(typeof(Enum)))
120
currentObjectPlace = ObjectPlace.EnumProperty;
121
else
122
currentObjectPlace = ObjectPlace.NormalProperty;
114
123
try
115
124
{
116
subObjects.Add(GetObjectInfo(stringConverter, propertyInfo.Name, ObjectPlace.NormalProperty, layer + 1, propertyInfo.PropertyType, propertyInfo.GetValue(value), onlyProperty, onlyPublic));
125
subObjects.Add(GetObjectInfo(stringConverter, propertyInfo.Name, currentObjectPlace, layer + 1, propertyInfo.PropertyType, propertyInfo.GetValue(value), onlyProperty, onlyPublic));
117
126
}
118
127
catch (Exception ex)
119
128
{
120
subObjects.Add(GetObjectInfo(stringConverter, propertyInfo.Name, ObjectPlace.NormalProperty, layer + 1, propertyInfo.PropertyType, $"[获取失败:{ex.Message}]", onlyProperty, onlyPublic));
129
subObjects.Add(GetObjectInfo(stringConverter, propertyInfo.Name, currentObjectPlace, layer + 1, propertyInfo.PropertyType, $"[获取失败:{ex.Message}]", onlyProperty, onlyPublic));
121
130
}
122
131
continue;
123
132
}
124
if (!onlyProperty && memberInfo is FieldInfo field)
133
if (!onlyProperty && memberInfo is FieldInfo fieldInfo)
125
134
{
126
subObjects.Add(GetObjectInfo(stringConverter, field.Name, ObjectPlace.Field, layer + 1, field.FieldType, field.GetValue(value), onlyProperty, onlyPublic));
135
if (fieldInfo.FieldType.IsAssignableTo(typeof(Array)))
136
currentObjectPlace = ObjectPlace.ArrayProperty;
137
else if (fieldInfo.FieldType.IsAssignableTo(typeof(IEnumerable)))
138
currentObjectPlace = ObjectPlace.ListProperty;
139
else if (fieldInfo.FieldType.IsAssignableTo(typeof(Enum)))
140
currentObjectPlace = ObjectPlace.EnumProperty;
141
else
142
currentObjectPlace = ObjectPlace.NormalProperty;
143
try
144
{
145
subObjects.Add(GetObjectInfo(stringConverter, fieldInfo.Name, currentObjectPlace, layer + 1, fieldInfo.FieldType, fieldInfo.GetValue(value), onlyProperty, onlyPublic));
146
}
147
catch (Exception ex)
148
{
149
subObjects.Add(GetObjectInfo(stringConverter, fieldInfo.Name, currentObjectPlace, layer + 1, fieldInfo.FieldType, $"[获取失败:{ex.Message}]", onlyProperty, onlyPublic));
150
}
127
151
}
128
152
}
129
153
return new ObjectInfoImpl(stringConverter, name, objectPlace, layer, type, false, false, value, subObjects);