2014-07-21 37 views
-1

我正在試圖連載從我的LINQ to SQL查詢的一些對象到XML如下:序列化的LINQ to SQL結果作爲XML

MyDataContext mdc= new MyDataContext(); 
var local_copy_of_items = md.MyItemsTables.Where(c=>c.CityId==35).Distinct().ToList(); 

local_copy_of_items.SerializeToXml(Filename); 

其中SerializeToXml

public static void SerializeToXml<T>(this T obj, string fileName) 
{ 
    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T)); 
    FileStream fileStream = new FileStream(fileName, FileMode.Create); 
    ser.Serialize(fileStream, obj); 
    fileStream.Close(); 
} 

例外:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: There was an error generating the XML document. 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o, XmlSerializerNamespaces namespaces) 
    at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o) 
    at .....Extensions.SerializeToXml[T](T obj, String fileName) 

此代碼失敗,發生InvalidOperationException。有人可以建議一個更好/正確的方式來實現這一目標?

更新:內部異常說: 而序列化類型的對象時檢測到循環引用

+0

它編譯? –

+0

是的。我只有一個運行時錯誤.... –

+0

哪一行失敗? –

回答

0

我相信這條線是你的問題:

local_copy_of_items.SerializeToXml("path",Filename); 

它看起來像您使用的是通用的擴展方法序列化你的對象(非常酷的BTW),但我想你想做的事是這樣的:

local_copy_of_items.SerializeToXml(Filename); 

您的擴展方法調用時僅接受一個參數:要將對象轉儲到的文件名。第一個參數,T obj,你永遠不必真正通過,它只是代表你正在調用方法的對象。

+0

對不起,這不是問題。代碼編譯並嘗試serializez只有運行時錯誤 –

+0

足夠公平,異常或任何內部異常說明哪個成員失敗了嗎?可空值? – boxed

1

根據XmlSerializer.SerializeThe XmlSerializer cannot serialize the following: arrays of ArrayList and arrays of List<T>.所以也許使用ToArray()而不是ToList()可以在這裏幫助。

+0

我試着序列化不同類型的實體,其中一些失敗而其他人工作。它與對象圖有關。 –