com.fasterxml.jackson.databind.JsonSerializer.serializeWithType()方法的使用及代码示例

x33g5p2x  于2022-01-21 转载在 其他  
字(11.6k)|赞(0)|评价(0)|浏览(106)

本文整理了Java中com.fasterxml.jackson.databind.JsonSerializer.serializeWithType()方法的一些代码示例,展示了JsonSerializer.serializeWithType()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。JsonSerializer.serializeWithType()方法的具体详情如下:
包路径:com.fasterxml.jackson.databind.JsonSerializer
类名称:JsonSerializer
方法名:serializeWithType

JsonSerializer.serializeWithType介绍

[英]Method that can be called to ask implementation to serialize values of type this serializer handles, using specified type serializer for embedding necessary type information.

Default implementation will throw UnsupportedOperationExceptionto indicate that proper type handling needs to be implemented.

For simple datatypes written as a single scalar value (JSON String, Number, Boolean), implementation would look like:

  1. // note: method to call depends on whether this type is serialized as JSON scalar, object or Array!
  2. typeSer.writeTypePrefixForScalar(value, gen);
  3. serialize(value, gen, provider);
  4. typeSer.writeTypeSuffixForScalar(value, gen);

and implementations for type serialized as JSON Arrays or Objects would differ slightly, as START-ARRAY/END-ARRAY and START-OBJECT/END-OBJECT pairs need to be properly handled with respect to serializing of contents.
[中]方法,可调用该方法要求实现序列化此序列化程序处理的类型的值,使用指定的类型序列化程序嵌入必要的类型信息。
默认实现将抛出UnsupportedOperationException,以指示需要实现正确的类型处理。
对于编写为单个标量值(JSON字符串、数字、布尔值)的简单数据类型,实现如下所示:

  1. // note: method to call depends on whether this type is serialized as JSON scalar, object or Array!
  2. typeSer.writeTypePrefixForScalar(value, gen);
  3. serialize(value, gen, provider);
  4. typeSer.writeTypeSuffixForScalar(value, gen);

而序列化为JSON数组或对象的类型的实现会略有不同,因为START-ARRAY/END-ARRAYSTART-OBJECT/END-OBJECT对需要在内容序列化方面得到正确处理。

代码示例

代码示例来源:origin: redisson/redisson

  1. @Override
  2. public void serializeAsElement(Object map, JsonGenerator gen,
  3. SerializerProvider provider) throws Exception
  4. {
  5. if (_typeSerializer == null) {
  6. _valueSerializer.serialize(_value, gen, provider);
  7. } else {
  8. _valueSerializer.serializeWithType(_value, gen, provider, _typeSerializer);
  9. }
  10. }

代码示例来源:origin: redisson/redisson

  1. @Override
  2. public void serializeContents(Iterator<?> value, JsonGenerator g,
  3. SerializerProvider provider) throws IOException
  4. {
  5. if (!value.hasNext()) {
  6. return;
  7. }
  8. JsonSerializer<Object> serializer = _elementSerializer;
  9. if (serializer == null) {
  10. _serializeDynamicContents(value, g, provider);
  11. return;
  12. }
  13. final TypeSerializer typeSer = _valueTypeSerializer;
  14. do {
  15. Object elem = value.next();
  16. if (elem == null) {
  17. provider.defaultSerializeNull(g);
  18. } else if (typeSer == null) {
  19. serializer.serialize(elem, g, provider);
  20. } else {
  21. serializer.serializeWithType(elem, g, provider, typeSer);
  22. }
  23. } while (value.hasNext());
  24. }

代码示例来源:origin: prestodb/presto

  1. @Override
  2. public void serialize(T value, JsonGenerator generator, SerializerProvider provider)
  3. throws IOException
  4. {
  5. if (value == null) {
  6. provider.defaultSerializeNull(generator);
  7. return;
  8. }
  9. try {
  10. Class<?> type = value.getClass();
  11. JsonSerializer<T> serializer = serializerCache.get(type, () -> createSerializer(provider, type));
  12. serializer.serializeWithType(value, generator, provider, typeSerializer);
  13. }
  14. catch (ExecutionException e) {
  15. Throwable cause = e.getCause();
  16. if (cause != null) {
  17. throwIfInstanceOf(cause, IOException.class);
  18. }
  19. throw new RuntimeException(e);
  20. }
  21. }

代码示例来源:origin: redisson/redisson

  1. protected void _serializeDynamicContents(Iterator<?> value, JsonGenerator g,
  2. SerializerProvider provider) throws IOException
  3. {
  4. final TypeSerializer typeSer = _valueTypeSerializer;
  5. PropertySerializerMap serializers = _dynamicSerializers;
  6. do {
  7. Object elem = value.next();
  8. if (elem == null) {
  9. provider.defaultSerializeNull(g);
  10. continue;
  11. }
  12. Class<?> cc = elem.getClass();
  13. JsonSerializer<Object> serializer = serializers.serializerFor(cc);
  14. if (serializer == null) {
  15. if (_elementType.hasGenericTypes()) {
  16. serializer = _findAndAddDynamic(serializers,
  17. provider.constructSpecializedType(_elementType, cc), provider);
  18. } else {
  19. serializer = _findAndAddDynamic(serializers, cc, provider);
  20. }
  21. serializers = _dynamicSerializers;
  22. }
  23. if (typeSer == null) {
  24. serializer.serialize(elem, g, provider);
  25. } else {
  26. serializer.serializeWithType(elem, g, provider, typeSer);
  27. }
  28. } while (value.hasNext());
  29. }
  30. }

代码示例来源:origin: redisson/redisson

  1. if (_nullSerializer != null) {
  2. gen.writeFieldName(_name);
  3. _nullSerializer.serialize(null, gen, prov);
  4. Class<?> cls = value.getClass();
  5. PropertySerializerMap m = _dynamicSerializers;
  6. ser = m.serializerFor(cls);
  7. if (ser == null) {
  8. ser = _findAndAddDynamic(m, cls, prov);
  9. ser.serialize(value, gen, prov);
  10. } else {
  11. ser.serializeWithType(value, gen, prov, _typeSerializer);

代码示例来源:origin: redisson/redisson

  1. public void serializeTypedContents(Object[] value, JsonGenerator jgen, SerializerProvider provider) throws IOException
  2. {
  3. final int len = value.length;
  4. final TypeSerializer typeSer = _valueTypeSerializer;
  5. int i = 0;
  6. Object elem = null;
  7. try {
  8. PropertySerializerMap serializers = _dynamicSerializers;
  9. for (; i < len; ++i) {
  10. elem = value[i];
  11. if (elem == null) {
  12. provider.defaultSerializeNull(jgen);
  13. continue;
  14. }
  15. Class<?> cc = elem.getClass();
  16. JsonSerializer<Object> serializer = serializers.serializerFor(cc);
  17. if (serializer == null) {
  18. serializer = _findAndAddDynamic(serializers, cc, provider);
  19. }
  20. serializer.serializeWithType(elem, jgen, provider, typeSer);
  21. }
  22. } catch (Exception e) {
  23. wrapAndThrow(provider, e, elem, i);
  24. }
  25. }

代码示例来源:origin: redisson/redisson

  1. public void serializeContentsUsing(Object[] value, JsonGenerator jgen, SerializerProvider provider,
  2. JsonSerializer<Object> ser) throws IOException
  3. {
  4. final int len = value.length;
  5. final TypeSerializer typeSer = _valueTypeSerializer;
  6. int i = 0;
  7. Object elem = null;
  8. try {
  9. for (; i < len; ++i) {
  10. elem = value[i];
  11. if (elem == null) {
  12. provider.defaultSerializeNull(jgen);
  13. continue;
  14. }
  15. if (typeSer == null) {
  16. ser.serialize(elem, jgen, provider);
  17. } else {
  18. ser.serializeWithType(elem, jgen, provider, typeSer);
  19. }
  20. }
  21. } catch (Exception e) {
  22. wrapAndThrow(provider, e, elem, i);
  23. }
  24. }

代码示例来源:origin: redisson/redisson

  1. Object elem = it.next();
  2. if (elem == null) {
  3. provider.defaultSerializeNull(g);
  4. } else {
  5. Class<?> cc = elem.getClass();
  6. JsonSerializer<Object> serializer = serializers.serializerFor(cc);
  7. if (serializer == null) {
  8. if (_elementType.hasGenericTypes()) {
  9. serializer.serialize(elem, g, provider);
  10. } else {
  11. serializer.serializeWithType(elem, g, provider, typeSer);

代码示例来源:origin: redisson/redisson

  1. if (_nullSerializer != null) {
  2. gen.writeFieldName(_name);
  3. _nullSerializer.serialize(null, gen, prov);
  4. Class<?> cls = value.getClass();
  5. PropertySerializerMap m = _dynamicSerializers;
  6. ser = m.serializerFor(cls);
  7. if (ser == null) {
  8. ser = _findAndAddDynamic(m, cls, prov);
  9. ser.serialize(value, gen, prov);
  10. } else {
  11. ser.serializeWithType(value, gen, prov, _typeSerializer);

代码示例来源:origin: redisson/redisson

  1. @Override
  2. public void serializeAsField(Object map, JsonGenerator gen,
  3. SerializerProvider provider) throws IOException
  4. {
  5. _keySerializer.serialize(_key, gen, provider);
  6. if (_typeSerializer == null) {
  7. _valueSerializer.serialize(_value, gen, provider);
  8. } else {
  9. _valueSerializer.serializeWithType(_value, gen, provider, _typeSerializer);
  10. }
  11. }

代码示例来源:origin: redisson/redisson

  1. Object elem = value.get(i);
  2. if (elem == null) {
  3. provider.defaultSerializeNull(jgen);
  4. } else {
  5. Class<?> cc = elem.getClass();
  6. JsonSerializer<Object> serializer = serializers.serializerFor(cc);
  7. if (serializer == null) {
  8. serializer.serializeWithType(elem, jgen, provider, typeSer);

代码示例来源:origin: redisson/redisson

  1. @Override
  2. public void serializeWithType(T ref,
  3. JsonGenerator g, SerializerProvider provider,
  4. TypeSerializer typeSer) throws IOException
  5. {
  6. Object value = _getReferencedIfPresent(ref);
  7. if (value == null) {
  8. if (_unwrapper == null) {
  9. provider.defaultSerializeNull(g);
  10. }
  11. return;
  12. }
  13. // 19-Apr-2016, tatu: In order to basically "skip" the whole wrapper level
  14. // (which is what non-polymorphic serialization does too), we will need
  15. // to simply delegate call, I think, and NOT try to use it here.
  16. // Otherwise apply type-prefix/suffix, then std serialize:
  17. /*
  18. typeSer.writeTypePrefixForScalar(ref, g);
  19. serialize(ref, g, provider);
  20. typeSer.writeTypeSuffixForScalar(ref, g);
  21. */
  22. JsonSerializer<Object> ser = _valueSerializer;
  23. if (ser == null) {
  24. ser = _findCachedSerializer(provider, value.getClass());
  25. }
  26. ser.serializeWithType(value, g, provider, typeSer);
  27. }

代码示例来源:origin: redisson/redisson

  1. public void serializeContentsUsing(Collection<?> value, JsonGenerator g, SerializerProvider provider,
  2. JsonSerializer<Object> ser) throws IOException
  3. {
  4. Iterator<?> it = value.iterator();
  5. if (it.hasNext()) {
  6. TypeSerializer typeSer = _valueTypeSerializer;
  7. int i = 0;
  8. do {
  9. Object elem = it.next();
  10. try {
  11. if (elem == null) {
  12. provider.defaultSerializeNull(g);
  13. } else {
  14. if (typeSer == null) {
  15. ser.serialize(elem, g, provider);
  16. } else {
  17. ser.serializeWithType(elem, g, provider, typeSer);
  18. }
  19. }
  20. ++i;
  21. } catch (Exception e) {
  22. wrapAndThrow(provider, e, value, i);
  23. }
  24. } while (it.hasNext());
  25. }
  26. }
  27. }

代码示例来源:origin: com.fasterxml.jackson.datatype/jackson-datatype-guava

  1. .serialize(null, gen, provider);
  2. } else {
  3. _keySerializer.serialize(key, gen, provider);
  4. for (Object vv : entry.getValue()) {
  5. if (vv == null) {
  6. provider.defaultSerializeNull(gen);
  7. continue;
  8. if (valueSer == null) {
  9. Class<?> cc = vv.getClass();
  10. valueSer = serializers.serializerFor(cc);
  11. if (valueSer == null) {
  12. valueSer = _findAndAddDynamic(serializers, cc, provider);
  13. valueSer.serialize(vv, gen, provider);
  14. } else {
  15. valueSer.serializeWithType(vv, gen, provider, _valueTypeSerializer);

代码示例来源:origin: redisson/redisson

  1. if (value == null) { // nulls need specialized handling
  2. if (_nullSerializer != null) {
  3. _nullSerializer.serialize(null, gen, prov);
  4. } else { // can NOT suppress entries in tabular output
  5. gen.writeNull();
  6. Class<?> cls = value.getClass();
  7. PropertySerializerMap map = _dynamicSerializers;
  8. ser = map.serializerFor(cls);
  9. if (ser == null) {
  10. ser = _findAndAddDynamic(map, cls, prov);
  11. ser.serialize(value, gen, prov);
  12. } else {
  13. ser.serializeWithType(value, gen, prov, _typeSerializer);

代码示例来源:origin: redisson/redisson

  1. keySerializer.serialize(keyElem, gen, provider);
  2. try {
  3. valueSer.serializeWithType(valueElem, gen, provider, _valueTypeSerializer);
  4. } catch (Exception e) {
  5. wrapAndThrow(provider, e, value, String.valueOf(keyElem));

代码示例来源:origin: com.jwebmp.jackson.core/jackson-databind

  1. public void serializeTypedContents(Object[] value, JsonGenerator jgen, SerializerProvider provider) throws IOException
  2. {
  3. final int len = value.length;
  4. final TypeSerializer typeSer = _valueTypeSerializer;
  5. int i = 0;
  6. Object elem = null;
  7. try {
  8. PropertySerializerMap serializers = _dynamicSerializers;
  9. for (; i < len; ++i) {
  10. elem = value[i];
  11. if (elem == null) {
  12. provider.defaultSerializeNull(jgen);
  13. continue;
  14. }
  15. Class<?> cc = elem.getClass();
  16. JsonSerializer<Object> serializer = serializers.serializerFor(cc);
  17. if (serializer == null) {
  18. serializer = _findAndAddDynamic(serializers, cc, provider);
  19. }
  20. serializer.serializeWithType(elem, jgen, provider, typeSer);
  21. }
  22. } catch (Exception e) {
  23. wrapAndThrow(provider, e, elem, i);
  24. }
  25. }

代码示例来源:origin: uk.co.nichesolutions.presto/presto-main

  1. @Override
  2. public void serialize(T value, JsonGenerator generator, SerializerProvider provider)
  3. throws IOException
  4. {
  5. if (value == null) {
  6. provider.defaultSerializeNull(generator);
  7. return;
  8. }
  9. try {
  10. Class<?> type = value.getClass();
  11. JsonSerializer<T> serializer = serializerCache.get(type, () -> createSerializer(provider, type));
  12. serializer.serializeWithType(value, generator, provider, typeSerializer);
  13. }
  14. catch (ExecutionException e) {
  15. propagateIfInstanceOf(e.getCause(), IOException.class);
  16. throw Throwables.propagate(e.getCause());
  17. }
  18. }

代码示例来源:origin: redisson/redisson

  1. public void serializeContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
  2. JsonSerializer<Object> ser)
  3. throws IOException
  4. {
  5. final int len = value.size();
  6. if (len == 0) {
  7. return;
  8. }
  9. final TypeSerializer typeSer = _valueTypeSerializer;
  10. for (int i = 0; i < len; ++i) {
  11. Object elem = value.get(i);
  12. try {
  13. if (elem == null) {
  14. provider.defaultSerializeNull(jgen);
  15. } else if (typeSer == null) {
  16. ser.serialize(elem, jgen, provider);
  17. } else {
  18. ser.serializeWithType(elem, jgen, provider, typeSer);
  19. }
  20. } catch (Exception e) {
  21. // [JACKSON-55] Need to add reference information
  22. wrapAndThrow(provider, e, value, i);
  23. }
  24. }
  25. }

代码示例来源:origin: FasterXML/jackson-datatype-guava

  1. .serialize(null, gen, provider);
  2. } else {
  3. _keySerializer.serialize(key, gen, provider);
  4. for (Object vv : entry.getValue()) {
  5. if (vv == null) {
  6. provider.defaultSerializeNull(gen);
  7. continue;
  8. if (valueSer == null) {
  9. Class<?> cc = vv.getClass();
  10. valueSer = serializers.serializerFor(cc);
  11. if (valueSer == null) {
  12. valueSer = _findAndAddDynamic(serializers, cc, provider);
  13. valueSer.serialize(vv, gen, provider);
  14. } else {
  15. valueSer.serializeWithType(vv, gen, provider, _valueTypeSerializer);

相关文章