XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

添加Json转换

39ff334
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

1 个文件 +46 -19
Modified XFEExtension.NetCore/XFETransform/StringConverter/JsonTransformer.cs +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 }