DeMemberInfo

This commit is contained in:
redkale
2024-09-17 11:12:14 +08:00
parent a7cddab9fb
commit 64f6ac55e7
11 changed files with 97 additions and 80 deletions

View File

@@ -5,7 +5,6 @@
*/
package org.redkale.test.convert;
import java.util.*;
import org.redkale.convert.*;
import org.redkale.convert.bson.*;
import org.redkale.convert.json.*;
@@ -41,11 +40,7 @@ public class InnerCoderEntity {
final org.redkale.convert.ConvertFactory factory) {
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
private DeMemberNode memberNode;
private Map<String, DeMember> deMemberFieldMap;
private Map<Integer, DeMember> deMemberTagMap;
private DeMemberInfo memberInfo;
// 必须与EnMember[] 顺序一致
private final DeMember[] deMembers = new DeMember[] {
@@ -60,13 +55,7 @@ public class InnerCoderEntity {
};
{
this.deMemberFieldMap = new HashMap<>(this.deMembers.length);
this.deMemberTagMap = new HashMap<>(this.deMembers.length);
for (DeMember member : this.deMembers) {
this.deMemberFieldMap.put(member.getAttribute().field(), member);
this.deMemberTagMap.put(member.getTag(), member);
}
this.memberNode = DeMemberNode.create(deMembers);
this.memberInfo = DeMemberInfo.create(deMembers);
}
@Override
@@ -88,7 +77,7 @@ public class InnerCoderEntity {
int index = 0;
final Object[] params = new Object[deMembers.length];
while (in.hasNext()) {
DeMember member = in.readFieldName(memberNode, deMemberFieldMap, deMemberTagMap); // 读取字段名
DeMember member = in.readFieldName(memberInfo); // 读取字段名
in.readBlank(); // 读取字段名与字段值之间的间隔符JSON则是跳过冒号:
if (member == null) {
in.skipValue(); // 跳过不存在的字段的值, 一般不会发生

View File

@@ -40,7 +40,7 @@ public class Json5Test {
bean.name = "ha\t\"ha";
bean.desc = "normal";
String json =
"{/*多行\r\n注释**/\"decmails\":3.2,//单行注释\r\n\"id\":0x1F4,\"idx\":600,\"name\":\"ha\\t\\\"ha\",\"desc\":\"normal\",\"value\":44444,}";
"{/*多行\r\n注释**/\"decmails\":3.2,//单行注释\r\n\"id\":0x1F4,\"idx\":600,name:\"ha\\t\\\"ha\",\"desc\":\"normal\",\"value\":44444,}";
Json5Bean bean2 = convert.convertFrom(Json5Bean.class, json);
System.out.println(bean2.name);
Assertions.assertTrue(bean.equals(bean2));