将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。有人能提出一个更好/正确的方法来实现这一点吗?
最新消息:内部例外情况显示:序列化类型的对象时检测到循环引用
根据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,你不需要实际传递,它只代表你调用方法的对象。