2012-08-10 4 views
6

Esiste un modo per serializzare l'oggetto creato dinamicamente su una stringa xml?Come serializzare oggetti anonimi in XML?

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

sono stato in grado di dare un'occhiata a XMLSerializer e DataContractSerializer ma XMLSerializer richiede il tipo di oggetto, mentre DataContractSerializer richiede attributo sulle proprietà che deve essere serializzato.

Per disperazione, ho convertito l'oggetto in JSON prima e da JSON convertito in 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

oggetti "' dynamic'" sono diversi:' nuove {..} 'risultati in un'espressione tipizzata staticamente. –

+1

Grazie per averlo indicato. Mi sono confuso con le terminologie. – xar

+0

Buona chiamata sulla modifica per convertire in JSON, quindi XML =) – madannes

risposta

5

Non utilizzare i serializzatori incorporati standard, no; XmlSerializerrichiede tipi pubblici (quali tipi anonimi non sono), e funziona solo per i membri di lettura-scrittura (quali tipi anonimi non hanno). DataContractSerializer desidera gli attributi (i tipi anonimi non hanno).

Francamente, la "correzione" più semplice e più comoda qui è quella di dichiarare formalmente un DTO POCO che corrisponde a ciò che si sta cercando, ovvero: non utilizzare un tipo anonimo qui. Per esempio:

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

L'alternativa sarebbe essenzialmente scrivere il proprio serializzatore XML. Quello ... non sembra divertente.