public class MyResponse {
private String stringValue;
private int intValue;
// Expectation: only include this field when value true, and exclude it when value is false
private boolean booleanValue;
}
// @JsonIgnoreProperties(value = { "booleanValue" })
// @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
private static class MixInMyResponse {
}
// this would be my rest service eventually send myResponse to UI
public MyResponse readFromRemote() throws IOException {
String jsonAsString =
"{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":false}";
ObjectMapper mapper = new ObjectMapper();
// configure object mapper with mix in
mapper.getDeserializationConfig().addMixInAnnotations(MyResponse.class, MixInMyResponse.class);
MyResponse myResponse = mapper.readValue(jsonAsString, MyResponse.class);
// Expectation: writeValue needs only include booleanValue when value true, and exclude booleanValue when value is false
String writeValue = mapper.writeValueAsString(myResponse);
System.out.println(writeValue);
return myResponse;
}
编写自己的序列化程序
public class MyResponseSerializer extends JsonSerializer<MyResponse> {
@Override
public void serialize(MyResponse myResponse, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("stringValue", myResponse.getStringValue());
jsonGenerator.writeNumberField("intValue", myResponse.getIntValue());
if (myResponse.isBooleanValue()) {
jsonGenerator.writeBooleanField("booleanValue", myResponse.isBooleanValue());
}
jsonGenerator.writeEndObject();
}
}
向ObjectMapper注册它
@Test
public void test3() throws IOException {
MyResponse response1 = new MyResponse("response1", 1, true);
MyResponse response2 = new MyResponse("response2", 1, false);
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(MyResponse.class, new MyResponseSerializer());
objectMapper.registerModule(module);
System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response1));
System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response2));
}
请参阅本教程
主要内容:使用excludeFieldsWithModifiers()方法,使用@Expose注解默认情况下,GSON排除序列化/反序列化过程中的瞬态和静态字段。 我们来看看下面的例子。 示例 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 使用excludeFieldsWithModifiers()方法 GsonBuilder使用序列化/反序列化过程中的方法提供对使用特定修饰符排除字段的控制。 看下面的例子。 示例 创建一个名为的Java
我一直在尝试使用为锈迹中的,设置以下配置,因此我可以直观地在配置中为提供,但它将被反序列化为。不幸的是,当我希望它是一个数字()而不是一个字符串(时,它似乎失败了。 cargo.toml 以下会导致错误: 梅因 奇怪的是,将写成,成功并返回: 梅因 留档中给出的一个示例似乎与我的情况相关,但我还没有设法让它与我的设置一起工作。 将枚举序列化为编号 crate 提供了替代派生宏,这些宏派生相同的序列
问题内容: 将xml文件序列化为.net c#对象后,在返回的json中获取k_BackingField。 我已经将DataContract和DataMember属性添加到.net c#对象,但是在json客户端上却什么也没得到。 返回的json的示例: 问题答案: 如果可以在序列化中使用该类,则实际上不建议使用自动属性语法。支持字段是由编译器生成的,每次编译代码时都会不同。即使未对类进行任何更改
如果我们有如下查询 返回预期的结果(如下所示) 正如您所看到的,查询是针对和我们希望从结果中排除其他字段,但只包括和的字段 并排除其他字段,例如,以下是一些不是或(传递到查询中的字段)的字段-从
问题内容: 我使用GSON进行序列化时,没有找到一种方法,无法根据Gson根据字段值提供的ExclusionStrategy类从序列化中排除某些字段,因为它仅支持基于顶级类或字段属性的排除。字段属性不包括该字段的值。所以我该怎么做? 问题答案: 实现此目的的方法是为相关类创建自定义序列化程序。在允许Gson以默认方式创建JSON对象之后,请根据其值删除要排除的属性。 并在用于此类的应用程序中用于序