2012-08-10 21 views
6

¿Hay alguna manera posible de serializar el objeto creado dinámicamente a una cadena xml?¿Cómo serializar objetos anónimos a XML?

var foobar = new { foo = "bar" }; 
string xml = ConvertToXMLString(foobar); 
//xml should be something like : 
//<foo>bar</foo> 

que era capaz de echar un vistazo a XMLSerializer y DataContractSerializer pero XMLSerializer requiere el tipo de objeto, mientras que DataContractSerializer requiere de atributos de las propiedades que necesita ser serializado.

Fuera de la desesperación, convertí el objeto a JSON primero y JSON lo convirtió a XML.

var foobar = new { foo = "bar" }; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
jsonString = js.Serialize(values); 
//Json.NET at http://json.codeplex.com/ 
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonString); 
+0

objetos "' dynamic'" son diferentes:' nuevos {..} 'resultados en una expresión de tipo estático. –

+1

Gracias por señalar eso. Me confundí con las terminologías. – xar

+0

Buena llamada en el truco para convertir a JSON, luego XML =) – madannes

Respuesta

5

No se usan los serializadores incorporados estándar, no; XmlSerializerdemandas tipos públicos (que tipos anónimos no son), y solo funciona para miembros de lectura y escritura (que los tipos anónimos no tienen). DataContractSerializer quiere atributos (que los tipos anónimos no tienen).

Francamente, la "solución" más simple y más soportable aquí es declarar formalmente un POCO DTO que coincida con lo que busca, también conocido como: no use un tipo anónimo aquí. Por ejemplo:

public class MyDto { 
    public string foo {get;set;} 
} 
... 
var foobar = new MyDto { foo = "bar" }; 

La alternativa sería esencialmente escribir su propia serializador XML. Eso ... no suena divertido.

Cuestiones relacionadas