Как сериализовать в XmlDocument / XmlElement, чтобы вернуть его из WCF? - PullRequest
0 голосов
/ 15 марта 2012

То, что я пытаюсь сделать, это вернуть XmlDocument из моей службы WCF.

Проблема в том, что я получил ошибку "Корневой элемент отсутствует."

вот мойкод

    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 пытался загрузить поток от последнего байта к последнему байту.Я пропустил позицию 0 в этом потоке.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Было бы намного чище вернуть xml в виде потока текста, а затем загрузить его в XmlDocument на потребителя.

1 голос
/ 15 марта 2012

Корневого элемента нет, потому что функция XmlDocument.Load считает, что поток имеет длину 0 байт.

Возможно, прочитайте эту ссылку: http://geekswithblogs.net/.NETonMyMind/archive/2007/11/15/116862.aspx

...