如何序列化到XmlDocument / XmlElement以便从WCF返回它?

时间:2012-03-15 12:34:20

标签: xml wcf xml-serialization wcf-data-services

我要做的是从我的WCF服务返回XmlDocument

问题是我收到错误“根元素丢失。”

这是我的代码

    public XmlElement GetDeviceListXML()// this got [XmlSerializerFormat]and [OperationContract]
    {
        List<Device> list = MyProject.BLL.Device.GetList();// here i getting list of devices from my database
        //Device is object which got [serializable] attribute
        XmlRootAttribute xra = new XmlRootAttribute("Device");
            xra.ElementName = "Devices";
            xra.Namespace = "http://MMEwidencja.pl";
            xra.IsNullable = false;
        XmlSerializer serializer = new XmlSerializer(typeof(List<Device>), xra);
        var stream = new MemoryStream();
        XmlDocument xDoc = new XmlDocument();;
        try
        {
            serializer.Serialize(stream, list);
            stream.Position = 0;// that what was I miss 
            xDoc.Load(stream);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return xDoc.DocumentElement;
    }

我应该如何做这项工作?

编辑: 我有解决方案,问题是XmlDocument试图从最后一个字节加载流到最后一个字节。我错过了将该位置置于该流中的位置。

2 个答案:

答案 0 :(得分:1)

没有根元素,因为XmlDocument.Load函数认为流的长度为0字节。

也许请阅读此链接:http://geekswithblogs.net/.NETonMyMind/archive/2007/11/15/116862.aspx

答案 1 :(得分:1)

将xml作为文本流返回然后将其加载到使用者的XmlDocument中会更加清晰。