Java

自定义序列化

项目和 Jackson 混用, redis 缓存使用 fastjson ; 无法序列化 JsonNode 对象, 使用自定义序列化一则

 
/**  
* @author yangfh  
* @date 2023-09-07 10:50  
* 
**/  
public class JsonNodeSerializer implements ObjectSerializer, ObjectDeserializer {  
	// 序列化 从 JsonNode 到 字符串
	@Override  
	public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
		//fieldType.getTypeName() = com.fasterxml.jackson.databind.JsonNode
		String text = object.toString(); 
		serializer.write( text );  
	}  
	// 反序列化 从 字符串 到 JsonNode
	@Override  
	public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {  
		String text= (String)parser.parse(fieldName);  
		return (T) JacksonUtils.readRootNode(text);  
	}  
	  
	@Override  
	public int getFastMatchToken() {  
	return 0;  
	}  
}
 
 

局部使用

public class OrgFarmInfoPersonDTO extends AbstractEntityDTO implements Serializable {  
  
public OrgFarmInfoPersonDTO(){}  
  
  
/**  
  
* ID  
*/  
@ApiModelProperty(value="id")  
@ObjectFieldDesciption(value = "ID", dataTag = "text")  
private String id;
 
// 使用自定义序列化
@JSONField(serializeUsing = JsonNodeSerializer.class,deserializeUsing = JsonNodeSerializer.class)  
private JsonNode photo;
 
...
 

全局使用

全局使用, 实现注意判断类型? Type fieldType

 
// 注册全局
SerializeConfig.getGlobalInstance().put(JsonNode.class, new JsonNodeSerializer());  
ParserConfig.getGlobalInstance().putDeserializer(JsonNode.class, new JsonNodeSerializer());