La forma más sencilla en que obtengo la deserialización de ServiceStack xml es cuando el xml contiene un espacio de nombres. Sin embargo, el xml que recibo no contiene espacios de nombres. El ejemplo de trabajo más simple:La deserialización de XML solo funciona con el espacio de nombres en xml
[Serializable]
public class test
{
}
class Program
{
static void Main(string[] args)
{
string xml="<test xmlns=\"http://schemas.datacontract.org/2004/07/\"></test>";
var result = ServiceStack.Text.XmlSerializer.DeserializeFromString<test>(xml);
}
}
Sin embargo, eso no es lo que quiero. Quiero que el siguiente para deserializar, ya que ese es el xml que recibo de varios servicios:
string xml="<test></test>";
Pero eso me da el siguiente error:
DeserializeDataContract: Error converting type: Error in line 1 position 7.
Expecting element 'test' from namespace
'http://schemas.datacontract.org/2004/07/'..
Encountered 'Element' with name 'test', namespace ''.
Traté:
[Serializable]
[XmlRoot("test", Namespace = "")]
public class test
No puedo crear un nuevo serializador porque ServiceStack.Text.XmlSerializer es estático. Necesito elegir ya sea Microsoft XmlSerializer O ServiceStack (no ambos). Significado: si no puedo hacer que funcione este sencillo ejemplo, debo omitir una parte del paquete ServiceStack que de otra manera sería muy útil. Lo último que quiero es inyectar un espacio de nombres ficticio en el xml entrante.
Gracias! ¡Ese era el eslabón perdido que necesitaba! De alguna manera no puedo encontrar la documentación correcta como esta para ServiceStack ... – user1154148
¿Alguna razón por la que no escribió su propio deserializador XML? El Microsoft parece necesitar este tipo de configuración de salsa mágica para que funcione, a diferencia de su serializador/deserializador JSON, que simplemente funciona. – JasonD
@JasonD Sí, no me gusta NIH'ing sin una buena razón y prefiero no usar XML. El XML DCS de MS también es bastante eficiente para XML, hay pocos beneficios por la cantidad de esfuerzo que habría requerido. – mythz