2012-08-10 13 views
6

Gibt es eine Möglichkeit, dynamisch erstelltes Objekt in eine XML-Zeichenfolge zu serialisieren?Wie man anonyme Objekte in XML serialisiert?

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

konnte ich einen Blick auf XMLSerializer und DataContractSerializer nehmen, aber XMLSerializer erfordert den Objekttyp, während DataContractSerializer Attribut auf die Eigenschaften erfordert, die serialisiert werden muss.

Aus Verzweiflung habe ich das Objekt zuerst in JSON konvertiert und von JSON in XML konvertiert.

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

"' dynamic'" Objekte sind unterschiedlich:' new {..} 'Ergebnisse in einem statisch typisierten Ausdruck. –

+1

Danke, dass Sie darauf hingewiesen haben. Ich habe mich mit den Terminologien vermischt. – xar

+0

Guter Anruf auf dem Hack, um zu JSON zu konvertieren, dann XML =) – madannes

Antwort

5

Nicht die Standard-eingebauten Serialisierer verwenden, nein; XmlSerializerAnforderungen öffentliche Typen (die anonymen Typen sind nicht), und funktioniert nur für Lese-Schreib-Mitglieder (die anonymen Typen haben keine). DataContractSerializer möchte Attribute (die anonymen Typen haben keine).

Ehrlich gesagt, ist die einfachste und am meisten unterstützbare "Lösung" hier, ein POCO-DTO formell zu deklarieren, das zu dem passt, was Sie suchen, aka: Verwenden Sie keinen anonymen Typ hier. Zum Beispiel:

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

Die Alternative wäre im Wesentlichen Schreiben Sie Ihren eigenen XML-Serializer sein. Das klingt nicht nach Spaß.

Verwandte Themen