2011-02-11 22 views
8

Creé una biblioteca de clases de contenedor API para consumir una API de reposo de un tercero.C# deserialización de xml con múltiples espacios de nombres posibles

Todo estaba funcionando hasta que actualizaron recientemente la API en la última versión de su producto y agregaron un espacio de nombre al elemento raíz, ahora mi código de deserialización está fallando.

Un ejemplo de una de mis clases:

[Serializable] 
[XmlRootAttribute(ElementName = "exit_survey_list")] 
public class SupportExitSurveyCollection : ApiResult { .... } 

Si establece la propiedad de espacio de nombres en el XmlRootAttribute al nuevo espacio de nombres de ser devuelto, entonces funciona correctamente de nuevo.

Pero necesito admitir ambas versiones de la API (espacio de nombres y no) porque no puedo estar seguro de qué versión de la API estará disponible.

Me gustaría hacerlo funcionar sin duplicar clases para diferentes versiones, pero no estoy seguro de si es posible.

Gracias por cualquier aportación/consejo.

Respuesta

1

No creo que eso sea posible.

Puede implementar la interfaz IXmlSerializable y controlar la serialización usted mismo; eso funcionaría, pero probablemente no es lo que quiere, ya que requeriría que usted haga una gran cantidad del mapeo usted mismo en el código.

Otra opción sería preprocesar los mensajes y agregar el espacio de nombres si falta. Entonces puedes tener un solo proceso de deserialización.

+0

Gracias por las ideas, fui a la ruta de procesamiento previo y eliminé todas las declaraciones del espacio de nombres. Me imagino que esto le permitirá seguir trabajando en el futuro si decide cambiar el espacio de nombres nuevamente. – Adam

Cuestiones relacionadas