将Linq.Table序列化为XML

3

我有一个非常简单的应用程序,目前只有一个基于单个表的Linq to Sql类。

我需要使用Linq To Sql类的DataContext将表中的所有行序列化(为XML)。

我该如何操作?

这是我当前的代码:

    var db = new MyEntityDataContext();
    Stream fs = new FileStream("Output.xml", FileMode.Create);
    XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);            

    serializer = new XmlSerializer(typeof(MyEntity));
    foreach (var row in db.MyEntitys)
    {
        // Serialize object to XML
        serializer.Serialize(writer,row);
    }

    writer.Close();

然而,它抛出了以下异常:"Token StartElement in state Epilog would result in an invalid XML document."

我还尝试过:

XmlSerializer serializer2 = new XmlSerializer(db.MyEntitys.GetType());

但是这会导致一个异常:"要使继承自IEnumerable的类型可序列化为XML,它们在继承层次结构的所有级别都必须实现Add(System.Object)方法。"

1个回答

2

XmlSerializer在处理关联时可能不是很好用。如果你在数据上下文表面启用序列化,它会添加(WCF)数据契约属性。也许只需使用:

var data = db.MyEntitys.ToList();
var ser = new DataContractSerializer(data.GetType());
ser.WriteObject(dest, data);

在 Linq.Table 上使用 ToList() 就解决了问题,现在可以使用 DataContractSerializer 或 XmlSerializer 进行操作。我应该自己尝试一下的。谢谢。有没有一种简单的方法来调整生成的 Xml 文件中元素名称,特别是 <ArrayOfMyEntity> 根元素? - TonE
我承认,我没有理由尝试过...所以我不知道。使用XmlSerializer,也许可以使用其中一个接受属性定义的重载? - Marc Gravell
没错,可以通过使用'XmlSerializer(Type type, XmlRootAttribute root);'指定。再次感谢您的帮助。 - TonE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接