package com.alibaba.json.bvt.bug; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.parser.ParserConfig; import junit.framework.TestCase; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.SerializerFeature; public class Bug_for_dragoon26 extends TestCase { protected void setUp() throws Exception { ParserConfig.global.addAccept("com.alibaba.json.bvt.bug.Bug_for_dragoon26"); } public void test_0() throws Exception { MonitorConfigMessage message = new MonitorConfigMessage(); MonitorConfig config = new MonitorConfig(); message.setContent(config); AlarmReceiver receiver1 = new AlarmReceiver(2001L); AlarmReceiver receiver2 = new AlarmReceiver(2002L); AlarmReceiver receiver3 = new AlarmReceiver(2003L); ArrayList<MonitorItem> items = new ArrayList<MonitorItem>(); { MonitorItem item1 = new MonitorItem(); item1.setId(1001L); MonitorItemAlarmRule rule = new MonitorItemAlarmRule(); rule.getAlarmReceivers().add(receiver1); rule.getAlarmReceivers().add(receiver2); item1.getRules().add(rule); items.add(item1); } { MonitorItem item = new MonitorItem(); item.setId(1002L); MonitorItemAlarmRule rule = new MonitorItemAlarmRule(); rule.getAlarmReceivers().add(receiver1); rule.getAlarmReceivers().add(receiver3); item.getRules().add(rule); items.add(item); } { MonitorItem item = new MonitorItem(); item.setId(1003L); MonitorItemAlarmRule rule = new MonitorItemAlarmRule(); rule.getAlarmReceivers().add(receiver2); rule.getAlarmReceivers().add(receiver3); item.getRules().add(rule); items.add(item); } config.setMonitorItems(items); String text = JSON.toJSONString(message, SerializerFeature.WriteClassName); System.out.println(JSON.toJSONString(message, SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat)); MonitorConfigMessage message2 = (MonitorConfigMessage) JSON.parse(text); System.out.println(JSON.toJSONString(message2, SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat)); } public static class MonitorConfigMessage { private Object content; public Object getContent() { return content; } public void setContent(Object content) { this.content = content; } } public static class MonitorConfig { private Map<Long, MonitorItem> monitorItems = new HashMap<Long, MonitorItem>(); @JSONField(name = "MonitorItems") public Collection<MonitorItem> getMonitorItems() { return monitorItems.values(); } @JSONField(name = "MonitorItems") public void setMonitorItems(Collection<MonitorItem> items) { for (MonitorItem item : items) { this.monitorItems.put(item.getId(), item); } } } public static class MonitorItem extends MonitorItemBase<MonitorItemAlarmRule> { } public static class MonitorItemBase <K extends AlarmRuleBase> { private Long id; private List<K> rules = new ArrayList<K>(); @JSONField(name = "mid") public Long getId() { return id; } @JSONField(name = "mid") public void setId(Long id) { this.id = id; } public List<K> getRules() { return rules; } public void setRules(List<K> rules) { this.rules = rules; } } public static class AlarmRuleBase { } public static class MonitorItemAlarmRule extends AlarmRuleBase { private List<AlarmReceiver> alarmReceivers = new ArrayList<AlarmReceiver>(); public List<AlarmReceiver> getAlarmReceivers() { return alarmReceivers; } public void setAlarmReceivers(List<AlarmReceiver> alarmReceivers) { this.alarmReceivers = alarmReceivers; } } public static class AlarmReceiver { private Long id; public AlarmReceiver(){ } public AlarmReceiver(Long id){ this.id = id; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } } }