XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore/XFETransform/StringConverter/JsonTransformer.cs
+46
-19
XFEstudio/XFEExtension
添加Json转换
39ff334
代码差异
1 个文件
+46
-19
@@ -1,11 +1,12 @@
1
using XFEExtension.NetCore.XFETransform.ObjectInfoAnalyzer;
1
using System.Collections;
2
using XFEExtension.NetCore.XFETransform.ObjectInfoAnalyzer;
2
3
3
4
namespace XFEExtension.NetCore.XFETransform.StringConverter;
4
5
5
6
/// <summary>
6
7
/// Json转换器
7
8
/// </summary>
8
internal class JsonTransformer : StringConverter
9
public class JsonTransformer : StringConverter
9
10
{
10
11
/// <summary>
11
12
/// 输出Json对象信息
@@ -22,15 +23,19 @@ internal class JsonTransformer : StringConverter
22
23
}
23
24
if (objectInfo.IsBasicType)
24
25
{
25
if (IsEnumerable(objectInfo))
26
if (IsEnumerableMember(objectInfo))
26
27
{
27
28
if (objectInfo.Value is null)
28
29
{
29
outPutString += "null";
30
outPutString += $"{tabString}null";
31
}
32
else if (objectInfo.Value is string)
33
{
34
outPutString += $"{tabString}\"{objectInfo.Value}\"";
30
35
}
31
36
else
32
37
{
33
outPutString += objectInfo.Value;
38
outPutString += $"{tabString}{objectInfo.Value}";
34
39
}
35
40
}
36
41
else
@@ -39,6 +44,10 @@ internal class JsonTransformer : StringConverter
39
44
{
40
45
outPutString += $"{tabString}\"{objectInfo.Name}\": null";
41
46
}
47
else if (objectInfo.Value is string)
48
{
49
outPutString += $"{tabString}\"{objectInfo.Name}\": \"{objectInfo.Value}\"";
50
}
42
51
else
43
52
{
44
53
outPutString += $"{tabString}\"{objectInfo.Name}\": {objectInfo.Value}";
@@ -50,8 +59,7 @@ internal class JsonTransformer : StringConverter
50
59
if (objectInfo.Layer == 0)
51
60
{
52
61
outPutString += objectInfo.SubObjects is not null ? $$"""
53
{
54
{{OutPutSubObjects(objectInfo.SubObjects)}}
62
{{{OutPutSubObjects(objectInfo.SubObjects)}}
55
63
}
56
64
""" : "null";
57
65
}
@@ -63,7 +71,11 @@ internal class JsonTransformer : StringConverter
63
71
}
64
72
return outPutString;
65
73
}
66
74
/// <summary>
75
/// 输出子对象的Json信息
76
/// </summary>
77
/// <param name="subObjects"></param>
78
/// <returns></returns>
67
79
public override string OutPutSubObjects(ISubObjects subObjects)
68
80
{
69
81
var outString = string.Empty;
@@ -75,15 +87,15 @@ internal class JsonTransformer : StringConverter
75
87
{
76
88
tabString += " ";
77
89
}
78
outString += tabString;
90
outString += "\n" + tabString;
79
91
string? currentConnectString;
80
92
if (i == subObjects.Count - 1)
81
93
{
82
currentConnectString = "\n";
94
currentConnectString = "";
83
95
}
84
96
else
85
97
{
86
currentConnectString = ",\n";
98
currentConnectString = ",";
87
99
}
88
100
if (obj.IsBasicType)
89
101
{
@@ -92,15 +104,28 @@ internal class JsonTransformer : StringConverter
92
104
}
93
105
else
94
106
{
95
if (IsEnumerable(obj))
96
outString += obj is not null ? $$"""
97
[{{OutPutObject(obj)}}]{{currentConnectString}}
107
if (IsEnumerableClassMember(obj))
108
outString += obj.Value is not null ? $$"""
109
{{tabString}}"{{obj.Name}}": [{{OutPutObject(obj)}}
110
{{tabString}}]{{currentConnectString}}
111
""" : "null";
112
else if (IsEnumerableMember(obj))
113
{
114
if (obj.Value is not null && (obj.Type!.IsAssignableTo(typeof(IEnumerable)) || obj.Type.IsAssignableTo(typeof(Array))))
115
outString += obj.Value is not null ? $$"""
116
{{tabString}}[{{OutPutObject(obj)}}
117
{{tabString}}]{{currentConnectString}}
118
""" : "null";
119
else
120
outString += obj.Value is not null ? $$"""
121
{{tabString}}{{{OutPutObject(obj)}}
122
{{tabString}}}{{currentConnectString}}
98
123
""" : "null";
124
}
99
125
else
100
outString += obj is not null ? $$"""
101
{{tabString}}{
102
{{tabString}}{{OutPutObject(obj)}}
103
{{tabString}}}
126
outString += obj.Value is not null ? $$"""
127
{{tabString}}"{{obj.Name}}": {{{tabString}}{{OutPutObject(obj)}}
128
{{tabString}}}{{currentConnectString}}
104
129
""" : "null";
105
130
}
106
131
}
@@ -111,5 +136,7 @@ internal class JsonTransformer : StringConverter
111
136
return outString;
112
137
}
113
138
114
internal static bool IsEnumerable(IObjectInfo objectInfo) => objectInfo.ObjectPlace == ObjectPlace.Array || objectInfo.ObjectPlace == ObjectPlace.List || objectInfo.ObjectPlace == ObjectPlace.ArrayMember || objectInfo.ObjectPlace == ObjectPlace.ListMember;
139
internal static bool IsEnumerable(IObjectInfo objectInfo) => objectInfo.ObjectPlace == ObjectPlace.Array || objectInfo.ObjectPlace == ObjectPlace.List;
140
internal static bool IsEnumerableMember(IObjectInfo objectInfo) => objectInfo.ObjectPlace == ObjectPlace.ArrayMember || objectInfo.ObjectPlace == ObjectPlace.ListMember;
141
internal static bool IsEnumerableClassMember(IObjectInfo objectInfo) => objectInfo.Value is not null && objectInfo.ObjectPlace == ObjectPlace.Property && (objectInfo.Type!.IsAssignableTo(typeof(IEnumerable)) || objectInfo.Type.IsAssignableTo(typeof(Array)));
115
142
}