将linq序列化为sql结果为xml

时间:2014-07-21 07:51:11

标签: c# sql linq

我正在尝试将我的linq中的一些对象序列化为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而失败。有人可以提出一个更好/更正确的方法来实现这个目标吗?

更新:内部例外说: 序列化类型为

的对象时检测到循环引用

2 个答案:

答案 0 :(得分:1)

根据XmlSerializer.Serialize The XmlSerializer cannot serialize the following: arrays of ArrayList and arrays of List<T>.所以也许使用ToArray()而不是ToList()可以在这里提供帮助。

答案 1 :(得分:0)

我相信这一行是你的问题:

local_copy_of_items.SerializeToXml("path",Filename);

看起来你正在使用通用扩展方法来序列化你的对象(非常酷btw),但我认为你想要做的是:

local_copy_of_items.SerializeToXml(Filename);

您的扩展方法在调用时只接受一个参数:要将对象转储到的文件名。第一个参数,这个T obj,你永远不必实际传递,它只代表你调用方法的对象。