2009-06-09 3 views
3

J'ai une application très simple qui a actuellement une seule classe Linq à Sql basée sur une seule table.Serialisation Linq.Table en XML

Je dois sérialiser (vers XML) toutes les lignes de la table en utilisant le DataContext pour la classe Linq To Sql.

Comment procéder?

Ceci est mon code actuel:

var db = new MyEntityDataContext(); 
    Stream fs = new FileStream("Output.xml", FileMode.Create); 
    XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);    

    serializer = new XmlSerializer(typeof(MyEntity)); 
    foreach (var row in db.MyEntitys) 
    { 
     // Serialize object to XML 
     serializer.Serialize(writer,row); 
    } 

    writer.Close(); 

Cependant, il jette l'exception suivante: "Token StartElement in state Epilog would result in an invalid XML document."

J'ai aussi essayé:

XmlSerializer serializer2 = new XmlSerializer(db.MyEntitys.GetType()); 

mais cela jette un "To be XML serializable, types which inherit from IEnumerable must have an implementation of Add(System.Object) at all levels of their inheritance hierarchy." exception .

Répondre

2

XmlSerializer peut ne pas être merveilleux avec les associations. Si vous activez la sérialisation sur la surface de contexte de données, elle ajoute des attributs de contrat de données (WCF). Peut-être utiliser simplement:

var data = db.MyEntitys.ToList(); 
var ser = new DataContractSerializer(data.GetType()); 
ser.WriteObject(dest, data); 
+0

L'utilisation de ToList() sur le Linq.Table a fait l'affaire et fonctionne désormais avec DataContractSerializer ou XmlSerializer. J'aurais dû essayer ça moi-même. Merci. Existe-t-il un moyen simple d'ajuster les noms d'éléments dans le fichier XML résultant, en particulier l'élément racine ? – TonE

+0

J'avoue, je n'ai pas eu de raison d'essayer ... donc je ne sais pas. Avec XmlSerializer, peut-être l'une des surcharges qui accepte les définitions d'attributs? –

+0

Oui, il peut être spécifié avec 'XmlSerializer (Type type, racine XmlRootAttribute);' Merci encore pour votre aide. – TonE