0

所以我得到了一个 JsonMappingException ,我认为这是一个奇怪的错误:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“CoTravellers”(JobPush 类),在 [Source: java.io.StringReader@416a60a0; 行:1,列:947](通过参考链:>JobPush["CoTravellers"])

现在,我所拥有的是:

ProtocolContainer --> JobPush (inherits from DataPacket) --> Job --> CoTravellers

上面错误中提到的 JobPush 是 DataPacket 的子类。所以,ProtocolContainer 有一个 DataPacket,我有几个继承 DataPacket 的类,其中 JobPush 是其中之一。

JobPush 很简单,如下所示:

public class JobPush extends DataPacket 
{
    public Job Job;
}

并且 CoTravellers 字段存在于 Job 类中,而不是 JobPush 中

public class Job implements Serializable
{
    @JsonDeserialize(using=CustomMapCoTravellerDeserializer.class)
    public Map<Objects.CoTravellers, Integer> CoTravellers;

    // ....
}

如您所见,我正在尝试使用自定义反序列化器(请参阅此处以供参考)。

现在,我无法理解为什么我会收到一条错误消息,提示 JobPush 中没有“CoTravellers”字段?我从来没有说过 CoTravellers 在 JobPush 中,因为它在 Job 类中。

我正在解析的 JSON 看起来像这样(为了清楚起见,这被裁剪了一点,其中 SubPacket 是变量名称,保存 DataPacket,在这种情况下是 JobPush):

"SubPacket":{
    "__type":"JobPush:#DataPackets.ToVehicle",
    "Job":{
    "CoTravellers":[
        {
           "Key":{
              "CoTravellerId":0,
              "Name":"Medresenär"
           },
           "Value":1
        }
     ]
     }
}

有大佬能帮我介绍一下吗?=)

---- 编辑 1 ----

为了清晰起见,添加一些东西:

因此,类继承自“DataPacket”类,因此我使用了@JsonSubTypes 注释来处理它。这是 DataPacket 类:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="__type")
@JsonSubTypes(
{
    @JsonSubTypes.Type(value = JobPush.class, name = "JobPush:#DataPackets.ToVehicle"),
})
public class DataPacket 
{
}
4

1 回答 1

0

您谈论的是 CoTraveller 字段,但在 JSON 中它是 CoTravellers,末尾带有“s”。

于 2013-01-27T21:04:56.537 回答