我正在尝试将我的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而失败。有人可以提出一个更好/更正确的方法来实现这个目标吗?
更新:内部例外说: 序列化类型为
的对象时检测到循环引用答案 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,你永远不必实际传递,它只代表你调用方法的对象。