En mi web method
, obtengo un objeto de una clase de entidad de C# de terceros. La clase de entidad no es más que el DataContract
. Esta clase de entidad es bastante compleja y tiene propiedades de varios tipos, algunas propiedades también son colecciones. Por supuesto, esos tipos vinculados también son DataContracts.Linq a Xml VS XmlSerializer VS DataContractSerializer
Quiero serializar esa entidad DataContract en XML como parte de la lógica comercial de mi servicio web. No puedo usar DataContractSerializer
directamente (en el objeto que recibo en el método web) simplemente porque el esquema XML es completamente diferente. Por lo tanto, el XML generado por DataContractSerializer no se validará con el esquema.
No puedo concluir el enfoque que debo seguir para la implementación. Lo que podía pensar siguientes criterios de aplicación:
LINQ to XML - Esto se ve bien, pero tengo que crear el árbol XML (es decir, elementos o representación XML de la instancia de clase) de forma manual para cada tipo de objeto. Dado que hay muchas clases de entidad y están vinculadas entre sí, creo que esto es demasiado trabajo para escribir elementos XML manualmente. Además, tendré que seguir modificando el Árbol XML a medida que la clase de entidad introduce alguna propiedad nueva. No solo esto, el código donde genero el árbol XML se vería poco torpe (al menos en apariencia) y sería más difícil de mantener/cambiar por algún otro desarrollador en el futuro; él/ella tendrá que mirarlo tan de cerca para entender cómo se genera ese XML.
XmlSerializer - Puedo escribir mis propias clases de entidad que representan la estructura XML que quiero. Ahora, necesito copiar los detalles del objeto entrante al objeto de mis propias clases. ¡Así que este es un trabajo adicional (para .NET también cuando se ejecuta el código!). Luego puedo usar
XmlSerializer
en mi objeto para generar XML. En este caso, tendré que crear clases de entidad y cada vez que se modifique una entidad de terceros, tendré que agregar una nueva propiedad en mi clase. (con atributos XmlElement o XmlAttibute). Pero la gente recomiendaDataContractSerializer
sobre este y por eso no quiero finalizar esto a menos que todos los aspectos estén claros para mí.DataContractSerializer - De nuevo aquí, voy a tener que escribir mi propia clase de entidad ya que no tengo control sobre las DataContracts de terceros. Y necesito copiar los detalles del objeto entrante al objeto de mis propias clases. Entonces este es un trabajo adicional. Sin embargo, dado que DataContractSerializer no admite atributos Xml, tendré que implementar
IXmlSerializable
y generar Xml requerido en el métodoWriteXml
. DataContractSerializer es más rápido que XmlSerializer, pero nuevamente tendré que manejar los cambios (en WriteXml) si la entidad de terceros cambia.
Preguntas:
- qué método es mejor en este escenario teniendo en cuenta el rendimiento también?
- ¿Puede sugerir un enfoque mejor?
- ¿Vale la pena considerar el
DataContractSerializer
(porque tiene un mejor rendimiento sobreXmlSerilaizer
) cuando la clase de entidad entrante está sujeta a cambios? - ¿Debería LINQ ser realmente utilizado para la serialización? ¿O es realmente bueno para otras cosas además de consultar?
- ¿Puede XmlSerializer ser preferido sobre LINQ en tales casos? ¿Si es así por qué?
Gracias por compartir el enlace. La solución proporcionada allí no es útil para mi problema, pero me ayudó a conocer una forma más de usar LINQ. – Learner