2009-06-09 3 views
3

У меня очень простое приложение, которое в настоящее время имеет один класс Linq to Sql на основе одной таблицы.Сериализация Linq.Table для XML

Мне нужно упорядочить (по XML) все строки в таблице, используя DataContext для класса Linq To Sql.

Как мне это сделать?

Это мой текущий код:

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(); 

Однако он бросает следующее исключение: "Token StartElement in state Epilog would result in an invalid XML document."

Я также попытался:

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

, но это бросает исключение "To be XML serializable, types which inherit from IEnumerable must have an implementation of Add(System.Object) at all levels of their inheritance hierarchy." ,

ответ

2

XmlSerializer не может быть замечательным с ассоциациями. Если вы разрешаете сериализацию на поверхности контекста данных, она добавляет (WCF) атрибуты данных-контракта. Возможно, просто используйте:

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

Использование ToList() на Linq.Table выполнило трюк, и теперь оно работает с использованием DataContractSerializer или XmlSerializer. Должен был попробовать это сам. Благодарю. Есть ли прямой способ настройки имен элементов в полученном Xml-файле, особенно в корневом элементе ? – TonE

+0

Признаюсь, у меня не было причин попробовать ... так что я не знаю. С XmlSerializer, возможно, одна из перегрузок, которая принимает определения атрибутов? –

+0

Да, это может быть указано с помощью 'XmlSerializer (тип типа, корень XmlRootAttribute);' Еще раз спасибо за помощь. – TonE