¿Cómo manejar diferentes tipos de datos con el mismo nombre de atributo con Gson?

Actualmente estoy escribiendo un analizador de fuentes RSS en Java utilizando Gson. Estoy convirtiendo el XML 'RSS en JSON, y luego utilizando Gson para deserializar el JSON en POJO de Java (algo indirecto, pero hay una razón para ello). Todo funcionaba bien en cuanto a la deserialización para el feed n. ° 1 (BBC) enumerados a continuación, pero para el feed n. ° 2 (NPR) enumerados a continuación, comencé a recibir excepciones.

Creo que he identificado el problema, pero no estoy seguro de cómo resolverlo:

El problema está surgiendo con estos dos canales RSS (por ejemplo):

http://feeds.bbci.co.uk/news/rss.xmlhttp://www.npr.org/rss/rss.php?id=1001

Para estos diferentes canales RSS, se devuelve un campo llamado "guid" como a)un objeto con 2 campos (como en elBBC RSS Feed) o b)una cuerda (como en elNPR RSS Alimentar).

Aquí hay algunas versiones parafraseadas del JSON relevante:

BBC RSS Feed

// is returning 'guid' as an object
"item" : 
[
    {
        // omitted other fields for brevity
        "guid" : {
            "isPermalink" : false,
            "content" : "http:\/\/www.bbc.co.uk\/news\/uk-england-33745057"
        },
    },
    {
        // ...
    }
]

NPR RSS Feed

// is returning 'guid' as a string
"item" : 
[
    {
      // omitted other fields for brevity
      "guid" : "http:\/\/www.npr.org\/sections\/thetwo-way\/2015\/07\/31\/428188125\/chimps-in-habeas-corpus-case-will-no-longer-be-used-for-research?utm_medium=RSS&utm_campaign=news"
    },
    {
      // ...
    }
]

Estoy modelando esto en Java así:

// RSSFeedItem.java
private Guid guid;

// GUID.java
private boolean isPermalink;
private String content;

Entonces, en este caso, funciona perfectamente bien llamando

Gson gson = new Gson();
RssFeed rssFeed = gson.fromJson(jsonData, RssFeed.class);

Para elBBC RSS feed, pero arroja una excepción al analizar elNPR RSS alimentar.

El error específico que me llevó a la conclusión de que se trata de un error de tipo fue el siguiente (al intentar deserializar elNPR RSS alimentar):

Severe:    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
           Expected BEGIN_OBJECT but was STRING at line 1 column 673 path
           $.rss.channel.item[0].guid

De todos modos, hasta el punto:¿Cómo puedo manejar esta situación con Gson, donde un campo se devuelve como tipos de datos potencialmente diferentes? Supongo que podría haber algún tipo de truco o anotación que podría usar para este efecto, pero no estoy seguro y después de verificar la documentación de Gson no pude encontrar una respuesta fácilmente disponible.

Respuestas a la pregunta(4)

Su respuesta a la pregunta