将linq序列化为xml形式的sql结果

本文关键字:sql 结果 xml linq 序列化 | 更新日期: 2023-09-27 18:13:54

我正试图将一些对象从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。有人能提出一个更好/正确的方法来实现这一点吗?

最新消息:内部例外情况显示:序列化类型的对象时检测到循环引用

将linq序列化为xml形式的sql结果

根据XmlSerializer。序列化The XmlSerializer cannot serialize the following: arrays of ArrayList and arrays of List<T>.,因此使用ToArray((而不是ToList((可能会有所帮助。

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

local_copy_of_items.SerializeToXml("path",Filename);

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

local_copy_of_items.SerializeToXml(Filename);

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